2017-07-29 99 views
-2

有人可以解释我的机制当基类对象使用派生类初始化时会发生什么。什么是对象的类型,对象是作为基础还是派生的?基类变量使用派生类初始化

+0

如何编写代码和调试自己呢? –

+0

“基类对象使用派生类初始化”或_base类引用使用派生类object_初始化? –

+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