我有三个班。为什么不能在子类中看到父类的方法?
A类
public class A {
}
B类
public class B extends A {
public void hello(){
System.out.println("hello");
}
}
C类
public class C extends B {
}
类检验
public class Test {
public static void main(String[] args) {
A a = new C();
a.hello(); // The method hello() is undefined for type A
}
}
上面的代码将无法编译,因为它报告读取错误“的方法你好()是不确定的A型”
我的问题是,因为“A”是一个C
对象,为什么不a.hello()
使用在B
的父类中的hello()
方法?
如果我添加一个hello方法A
类,最后才上面的代码使用hello()
从B级,可是为什么我要加hello()
到A
级才能使用的方法,从B
类?
您的变量'a'可能包含对'A'的另一个子类(如'D')的引用,它没有提供方法'hello()' - 编译器根本不知道。因此,编译器只允许调用为类“A”定义的方法。 –
和'Object o = new String(“123”);'不能使用'o.length();'然而,如果你将o赋给一个String,那么你可以使用String的方法。 –
这听起来像你可能希望你定义'B'通过“扩展”它的功能来改变'A'的定义吗?那是你在想什么?因为,如果是这样,那是不正确的。通过定义'B'和'C',你对'A'什么都不做。相反,“B”和“C”将“A”的定义“复制”或“继承”为起点,然后您在其中定义的任何内容都可以访问“A”的定义。 – dantiston