Java 当我们在类中定义接口的抽象方法时,我们是否';覆盖';或';实施';或者干脆说';定义';那些方法?
类B中的show()方法是“已重写”、“已实现”还是仅“已定义”Java 当我们在类中定义接口的抽象方法时,我们是否';覆盖';或';实施';或者干脆说';定义';那些方法?,java,interface,Java,Interface,类B中的show()方法是“已重写”、“已实现”还是仅“已定义” interface A { void show(); } class B implements A { public void show() { System.out.println("What is the proper term to explain?"); } } 类B中的方法show()实现在接口A中声明的方法。您应该说implement,因为override意味着您正在
interface A
{
void show();
}
class B implements A
{
public void show()
{
System.out.println("What is the proper term to explain?");
}
}
类
B
中的方法show()
实现在接口A
中声明的方法。您应该说implement,因为override
意味着您正在覆盖一些现有方法,而这些方法在接口的情况下是不正确的。接口不能包含方法定义,它们只是指定了一个契约。简单的回答,我们覆盖那些方法,为什么
因为这代表了多态语句的概念,记住
List<String> aa = new ArrayList<>();
// List => interface
// ArrayList => class
aa.add("polymorphic statment");
List aa=new ArrayList();
//列表=>接口
//ArrayList=>class
aa.添加(“多态状态”);
多态语句和过度隐藏是相辅相成的
尽管任何类也可以通过声明自己abstract
来实现接口,并且不需要重写任何方法
注意:在任何IDE中应用相同的概念,将指导您添加@Override
注释。一般来说,我说“Override”是指重新定义继承的行为,而我保留“implement”是指定义行为(尚未实现)
所以我想说B
实现了show()
而问题似乎是这样的:
如果非抽象方法mC
从
类C
,则称mC
从C
实现mA
似乎是说,override
也要重新定义一种行为:
子类重写方法的能力允许类
从行为“足够接近”的超类继承,然后
根据需要修改行为。重写方法具有相同的名称,
参数的数量和类型,以及返回类型作为它所使用的方法
覆盖。重写方法也可以返回该类型的子类型
由重写的方法返回。此子类型称为协变类型
返回类型
请注意,java.lang.Override
注释没有说相反的话(重点是我的):
指示方法声明旨在重写方法
超类型中的声明。如果一个方法被注释为
生成错误消息需要注释类型编译器
除非至少满足以下条件之一:
该方法不会覆盖或实现在
超级类型
该方法具有一个签名,该签名等同于任何
对象中声明的公共方法
API可以在@Override
注释之外提供@Implement
。
但两者兼而有之似乎相当笨拙。所以他们可能只保留了一个:@Override
来传达这两件事 implemented是betterI会说“Implemental”是最正确的,因为“override”表示它已经有一个正在被重写的实现,而“define”仅在类“B”可能重复的上下文中才是真的(无论如何,JLS的答案在那里。在本例中,show
同时被重写和实现。)无论使用哪种术语,您都应该使用@Override
注释(除非有默认实现,因为java 8),我不知道这一点。谢谢你指出这一点。但是,我想不出这样做会有什么用处(为什么不使用抽象类?)它确实与抽象类类似,但有时您确实希望在接口中使用它,例如,当实现类实现多个接口或已经扩展了某个抽象类时。但它显然不能被过度使用,否则会导致糟糕的设计。我同意,过度使用这会导致糟糕的设计注释声明“覆盖或实现超类型中声明的方法”=>在我的理解中,重写用于抽象类,实现用于接口。@Joel,但您可以重写在继承类中定义的具体方法。否?但重写建议替换现有的实现,而接口(如果我们不使用默认值)则不是这样错误:方法不重写或实现超类型@override^中的方法。在错误上下文中使用“@override”注释时,我收到了上述错误消息。我认为Java使用相同的注释从接口实现方法&重写子类中的方法。@PratipChakraborty你一定做错了什么,访问修饰符,参数等等。请查看@Pavneet_Singh我想要一些极客的建议来解决争议。由于没有表示从接口实现方法的单独注释,因此使用了“@Override”。虽然这两个概念有点相似,但希望Stack Overflow方面的专家对这个主题有更多的了解。任何其他视图@Pavneet_Singh,因为我认为IDE会导致“@Override”注释,因为没有任何其他合适的注释可以定义相同的注释。无论如何,谢谢你宝贵的时间和意见。