我问的问题是你能否拥有以下内容。 super是sub的超类
super thing = new sub();
然后从子类
调用一个方法答案 0 :(得分:2)
class A
{
public void foo() { System.out.println("foo"); }
public void baz() { System.out.println("baz"); }
}
class B extends A
{
public void foo() { System.out.println("fizz"); }
public void bar() { System.out.println("bar"); }
}
public class Program
{
public static void main(String[] args)
{
A obj1 = new A();
A obj2 = new B();
obj1.foo(); // prints "foo"
obj1.baz(); // prints "baz"
obj2.foo(); // prints "fizz"
obj2.baz(); // prints "baz"
obj2.bar(); // compile error
((B)obj2).bar(); // prints "bar"
((B)obj1).bar(); // runtime error
}
}
如您所见,初始化为A
的{{1}}类型的对象将调用B
中的所有重写方法,但B
中的新方法1}}无法看到。未被覆盖的方法将使用超类中的版本。
您可以将类强制转换为更具体的对象(将对象声明为子类类型的超类),但如果对象不是实际更具体类型的实例,那么'' ll在运行时获得B
。