基类变量使用派生类初始化

时间:2017-07-29 08:13:57

标签: java c#

有人可以解释一下当基类对象用派生类初始化时会发生什么的机制。什么是对象类型,对象表现为基础还是派生?

1 个答案:

答案 0 :(得分:1)

对象的类型不会改变,因此该对象将作为派生类的对象。

但由于变量的类型是基类,因此无法直接访问派生类的类成员。因此,您必须在基类中声明方法并在派生类中覆盖它们以使用派生类的功能。

请注意,这仅适用于具有静态类型变量的语言,如Java,C ++,C#。

以下是Java中的一个简单示例:

class BaseClass {

    public void info() {
        System.out.println("base class");
    }
}

class DerivedClass extends BaseClass {

    @Override
    public void info() {
        System.out.println("derived class");
    }

    public void specialMethod() {
    }
}

public class Test {

    public static void main(String[] args) {
        BaseClass b = new DerivedClass();
        b.info();
        System.out.println("Type of b: " + b.getClass());
        // not allowed:
        // b.specialMethod();
    }
}

这将产生以下输出:

derived class
Type of b: class DerivedClass