继承在java中发生
我试图检查java接口在java&;我得到了一些结果
我很惊讶它在java中允许内部类。因此,我们可以很容易地产生钻石问题。即使java已经注意到了这一点
我所做的是
main接口。java
public interface MainInterface {
class MyTest{
public MyTest(){
System.out.print("AAAA");
}
}
}
测试。java(接口)
public interface Test extends MainInterface{
public void abc();
class MyTest{
public MyTest(){
System.out.print("AAAA");
}
}
}
Test2。java(接口)
public interface Test2 extends MainInterface{
class MyTest {
public MyTest() {
System.out.print("BBBB");
}
}
}
实现类
public class AllTest implements Test,Test2{
public void abc() {
}
}
主类
public class Main {
public static void main(String[] args) {
AllTest.MyTest test = new AllTest.MyTest();// at this line it conflict.
}
}
我的问题是它的解决方案应该是什么? 2) 为什么java允许这样做?(众所周知,java由于菱形问题而停止了多次扩展。)
# 1 楼答案
接口中的内部类是隐式的
static
(就像方法是隐式的public
,即使不使用public
关键字)话虽如此,但并不存在冲突,您可以简单地将其实例化为:
或者,如果导入内部类:
为什么可以同时实现
Test
和Test2
在实现
Test
和Test2
接口时,(隐式地)静态MyTest
类仍然是Test
和Test2
接口的内部类,而不是实现者AllTest
类。只是如果没有名称冲突,也可以通过AllTest
类引用它们类比:如果一个超类有一个公共静态字段,那么子类可以像引用自己的字段一样引用它,但它仍然属于该超类
# 2 楼答案
应该是
或者
我真的不觉得有什么问题。如上所示,有一个简单的解决方法