gpt4 book ai didi

java - 类如何将其父类(super class)的方法视为接口(interface)方法的实现?

转载 作者:行者123 更新时间:2023-12-01 08:07:20 25 4
gpt4 key购买 nike

让我直接跳到示例来演示我想要问的内容,而不是谈论理论。

// The below piece of code is present in a single java file named "MyMain.java"
public class MyMain {
public static void main(String args[]) {
IFace iFace = new CSub();
iFace.method(); // This method essentially belongs to CSuper which doesn't implement IFace
}
}

interface IFace {
void method(); // Method in the interface
}

class CSuper {
public void method(){ // some method in this class, but not the one which implements the method of IFace
System.out.println("I'm not implementing IFace's method");
}
}

class CSub extends CSuper implements IFace {} // No method implemented in the class and yet no error.

显然,上面的代码是有效的,因为我能够在执行时获得输出我没有实现 IFace 的方法

我的问题是, CSub 怎么样?采取method()CSUper作为method()的实现的IFace界面。似乎继承是这背后的原因,但我需要一些具体的答案。另外,是否有一个 JLS 引用资料可以阐明如何通过继承实现这一点?

<小时/>

接下来的问题是,假设这是有原因的(因为我猜测它是继承,但需要确定它),为什么相同的代码片段不起作用,如果我进行以下任一更改吗?

更改 1:

class CSuper {
void method(){ // there is no access specifier, thus default(package)
System.out.println("I'm not implementing IFace's method");
}
}

更改 2:

class CSuper {
protected void method(){ // access specifier is now protected
System.out.println("I'm not implementing IFace's method");
}
}

对于我所做的上述两项更改,我收到一个编译错误,指出继承的方法 CSUper.method() 可以在这一行隐藏 IFace 中的公共(public)抽象方法

class CSub extends CSuper implements IFace {}

为什么会这样呢?既然是继承,则protecteddefault 访问说明符应该有效,因为所有类都存在于同一个文件中。和method()必须继承到CSub类,就像问题第一部分中的情况一样。有人能强调一下这个案例吗?

最佳答案

蒂姆回答了大部分问题。对于 JLS 引用,来自 section 8.1.5 :

Unless the class being declared is abstract, the declarations of all the method members of each direct superinterface must be implemented either by a declaration in this class or by an existing method declaration inherited from the direct superclass, because a class that is not abstract is not permitted to have abstract methods (§8.1.1.1).

关于java - 类如何将其父类(super class)的方法视为接口(interface)方法的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com