java - 它是多重继承吗?如果不是,为什么?

标签 java multiple-inheritance

public interface A {
    class Aclass {
        int constants = 100;
        public void display()
        {
            System.out.println("Inside A");
        }
    }
    public void display();

}
public interface B {
    class Bclass {
        int constants = 130;

        public void display() {
            System.out.println("Inside B");
        }
    }
    public void display();
}

public class MultipleInheritance implements A, B {

    @Override
    public void display() {
        A.Aclass a = new A.Aclass();
        System.out.println(a.constants);
        B.Bclass b = new B.Bclass();
        System.out.println(b.constants);
    }

    public static void main(String args[]) {

        new MultipleInheritance().display();
    }
}

虽然它是通过接口(interface)而不是通过一个你没有继承任何东西的上下文中的具体类,但它仍然不是代码重用,即使维护内部类会很困难,但它仍然充当多重继承请澄清如果可能,使用内存表示。

最佳答案

让我们回顾一下您的代码中实际包含的内容。在这里声明接口(interface) A 和嵌套类 AClass:

public interface A {
    class Aclass {
        int constants = 100;
        public void display()
        {
            System.out.println("Inside A");
        }
    }
    public void display();
}

在这里你声明接口(interface)B和一个嵌套类Bclass:

public interface B {
    class Bclass {
        int constants = 130;

        public void display() {
            System.out.println("Inside B");
        }
    }
    public void display();
}

在这里实例化Aclass:

A.Aclass a = new A.Aclass();

在这里你实例化Bclass:

B.Bclass b = new B.Bclass();

现在请注意,AclassBclass 是两个完全不相关的类。这两个共享的唯一共同父类(super class)型是 Object

很明显,如果您甚至不尝试从两种类型继承,就谈不上多重继承。

在这里你至少尝试涉及两个父类(super class)型:

public class MultipleInheritance implements A, B { ... }

但是你永远不会在你的代码中涉及这个类型,它只是 main 方法的一个容器。这种类型虽然实现了两个接口(interface),但不会从它们继承任何东西:它继承了两种不同的类型(AclassBclass)。另请注意,即使它们具有相同的名称,仍然不会存在多重继承。只会发生命名冲突。

多重继承严格来说是关于方法实现的继承,显然你无法在 Java 中实现这一点。

关于java - 它是多重继承吗?如果不是,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631367/

相关文章:

python - Mixins、多重继承、构造函数和数据

java - 如何在 Java 中将 BigDecimal 转换为 Double?

java - jvm dup 指令的用例

java - 将构造函数的属性添加到 ArrayList?

python - 如果定义一个没有 __init__ 方法的类会怎样?

python - 可以使用 MRO 来覆盖混入吗?

c++ - 通过两个不同的基类引用一个对象是否违反了严格的别名规则?

java - 根据模式切换 int 数组中的数字

java - 如何选择 Java 使用的文件分隔符?

java - C# 无法访问的代码(依赖于属性的数组复制器)