对于java中继承机制应该怎样理解?
树成 2007-08-08 10:57:36 我们经常用到java的继承,那么我们要如何去理解它呢?也就是他是如何实现的?
如果我们写一个A类,写一个B类继承A类。
那么我们实例化A类的时候是如何实现继承的?我们都说B可以调用到A的公有和受保护的属性和方法,在外部可以通过B调用到A的公有的属性和方法。那么为什么可以这么调用呢?
我们可以理解为两种情况:
一种是实例化B的时候同时也实例化了A,这样所带来的问题就是,如果我这个B以上继承了很多父类的话,那么就要把它们通通实例化,显然是不行的,而且如果父类是抽象类的话,按照我们对java机制的了解,抽象类不能被实例,这样就相互矛盾了,不过也有猜测性解释,抽象类能通过实现子类来实例化,但是不能显示实例化,不过java似乎没有这种说法。
第二种就是简单的代码复制,当我B继承A的时候,我们把它理解为把A的代码全部复制到B来实例化,不过这个想法依然有挑战,如果全部复制的话,同名属性要如何处理?方法覆盖要如何处理?而且如果是代码复制,那么理所当然的私有方法也能够调用到,但是为什么不能被调用到呢?如果只是复制保护以上级别的属性或者方法的话,那么又可以利用到super关键字来访问到父类的公有方法间接访问到私有属性。
我有以上两种理解方式,不过都存在自身矛盾,那么java它是如何实现继承的呢,如果各位有自己的理解或者官方公认的解说请给与请教。