子类如何与超类进行交互

时间:2014-02-19 15:46:45

标签: java

我问的问题是你能否拥有以下内容。 super是sub的超类

super thing = new sub();

然后从子类

调用一个方法

1 个答案:

答案 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