Java继承并非是简单的代码复制

来源:互联网 发布:一对一私聊软件 编辑:程序博客网 时间:2024/05/18 00:50

        继承是软件复用的一个关键,但是继承并非是简单的代码复制:即类A继承了类B,并不只是类A有了类B的代码。因为java是可以向上转型的,即B=new A()是合法的,而若有另一个类C,也从B继承,下面这行代码将报错:B=new C()。更加具体的代码如下所示:

public class TestFactory 
{
public static void main(String args[])
{
SuperClass supe=new SubClass2();
supe.printTest();
supe=new SubClass();
supe.printTest();

/********同级不能转型*******/
// SubClass sub=new SubClass2()); 
}
}


class SuperClass
{
public void printTest(){};
}


class SubClass extends SuperClass
{
@Override
public void printTest() 
{
System.out.println("subclass!");
}
}


class SubClass2 extends SuperClass
{
@Override
public void printTest() 
{
System.out.println("subclass2!");
}
}

由于上面三个类代码差不多,若继承机制只是简单的代码复制的话,注释部分不应该报错。这也许可以用Java编程思想中的观点解释:当类继承的时候,派生类里便拥有了一个基类对象。所以当向上转型的时候,派生类对象便隐藏自己的部分,剩下的就是继承得到的基类对象了,于是便可以顺利向上转型。而同类之间由于没有继承,所以彼此之间没有像上述的继承而来基类对象,所以无法转型,即若SubClass2里有一个SubClass对象的时候,就能顺利转型啦。所以说Java继承并非是简单的代码复制

0 0