Java 错误+;继承+;接口

Java 错误+;继承+;接口,java,inheritance,interface,Java,Inheritance,Interface,编译以下系列的类和接口。但是下面的类,在这段代码之后,没有 public abstract class ClassA { public void methodOne() { System.out.println("Hello from methodOne."); } public int methodTwo(int a, int b) { return a + b; } public abstract int metho

编译以下系列的类和接口。但是下面的类,在这段代码之后,没有

public abstract class ClassA {
    public void methodOne() {
        System.out.println("Hello from methodOne.");
    }

    public int methodTwo(int a, int b) {
        return a + b;
    }

    public abstract int methodThree(int a, int b);
}

public interface InterfaceA {
    int methodOne(int a, int b);
}

public class ClassB extends ClassA {
    public int methodOne(int a) {
        return 5 * a;
    }

    public int methodTwo(int a, int b) {
        return 2 * super.methodTwo(a, b);
    }

    public int methodThree(int a, int b) {
        return a * b;
    }
}

public class ClassC extends ClassB implements InterfaceA {

    public int methodOne(int a, int b) {
        return a % b;
    }

    public int methodThree(int a, int b) {
    return a ‐ b;
}

    public void methodFour(int a) {
        System.out.println("Here is number: " + a);
    }
}

public class ClassD extends ClassC {
    public void methodFour(int a, int b) {
        System.out.println("Here is the sum: " + (a + b));
    }

}

在下面的类中,下面的输出在编译过程中给出了错误,但是为什么呢?另外,例如,
ClassA_Type bla=new ClassB(),它的确切含义是什么?

您不能这样做,因为ClassA是抽象的,这意味着只有子类可以作为的实例

ClassA twoA = new ClassB();

查看和上的oracle文档页面

抽象类是一个声明为抽象的类,它可能包含也可能不包含抽象方法。抽象类不能实例化,但可以子类化

由于上述原因,下面的语句抛出编译错误(因为
ClassA
是抽象类,无法实例化)

关于您对


另外,例如,ClassA_Type bla=new ClassB()时,它的确切含义是什么

这意味着已经创建了具体类
ClassB
,即
ClassA
的子类

当抽象类被子类化时,子类通常为其父类中的所有抽象方法提供实现。在本例中,抽象方法
methodThree
已在
ClassB
中实现

使用

ClassA_Type bla = new ClassB()
而不是

ClassB_Type bla = new ClassB()
是:

将来,如果ClassC扩展ClassA,您只需更改

 ClassA_Type bla = new ClassC() 
基类可以用任何具体实现实例化

oneIA.methodFour(6,7)
不会编译,因为
InterfaceA
没有方法
methodFour
。编译器只能识别​ 声明的变量类型的成员


您询问的作业是一个“加宽转换”示例,JLS对此进行了详细解释。请在此处阅读。

考虑添加确切的错误消息。@Berger该问题发生在过去的一次作业中,作业中要求说明某个类的输出,并在适当的情况下写入“error”。“此外,例如,ClassA_Type bla=new ClassB()?”以及您在哪里遇到问题时,它的确切含义是什么,请明确说明,您对“以下”的使用不明确,且未正确、清晰地提供进一步信息。此外,没有
oneC
ORV,这也将导致编译错误。谢谢!另外,如果bla是ClassA_类型,或者是InterfaceA_类型,这意味着什么/基于类类型它到底是由什么绑定的?如果ClassC扩展ClassB实现InterfaceA,那么C类可以是1)ClassB类型2)class A类型(因为B类扩展了class A)3)InterfaceA类型
ClassA_Type bla = new ClassB()
ClassB_Type bla = new ClassB()
 ClassA_Type bla = new ClassC()