继承是软件复用的一个关键,但是继承并非是简单的代码复制:即类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继承并非是简单的代码复制