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()