Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我们在类中定义接口的抽象方法时,我们是否';覆盖';或';实施';或者干脆说';定义';那些方法?_Java_Interface - Fatal编程技术网

Java 当我们在类中定义接口的抽象方法时,我们是否';覆盖';或';实施';或者干脆说';定义';那些方法?

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意味着您正在

类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
意味着您正在覆盖一些现有方法,而这些方法在接口的情况下是不正确的。接口不能包含方法定义,它们只是指定了一个契约。

简单的回答,我们
覆盖那些方法,为什么

因为这代表了多态语句的概念,记住

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”注释,因为没有任何其他合适的注释可以定义相同的注释。无论如何,谢谢你宝贵的时间和意见。