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

解决方案 »

  1.   

    继承就是 继承 ,继承自父类的属性、方法,这样你可以提取出来一些共用的,子类可以进行拓展自己的东西。干嘛非要钻牛角尖呢,java规定让你Stirng S大写,这就是规则,所以你去研究那些为什么可以使用父类的方法什么的是没有实质性的意义。你爸爸给你的零花钱,你为什么要去追究为什么这个钱你可以花?没意义语言就是规则,你这么些这没用,我就会这么给你解释,这样大家都按照规则,你懂,Java懂,最后计算机也懂,这样就可以运行了。
      

  2.   

    实例化B的时候同时也实例化了A,因为JAVA中继承只能是单继承,不存在多继承,如果要实现多重继承就需要通过接口实现;抽象类并不是不能实例化,只是不能采用new运算实例化,而且如果父类是抽象类,子类必须重写父类中的抽象方法;
      

  3.   

    lz手上没有足够的代码实践呀,对面向对象的理解只停留在文字概念表面,没有领悟思想。思想源于大量实践后,思考并与理论表述产生共鸣,这个不是举几个例子就可以深刻体会的。并不是会写代码了就领悟了思想,java的特点:封装、继承、多肽。就这六个字至少要工作2年左右你才能明白其中蕴含的编程思想,才能体会到他的美妙。
      

  4.   

    我认为这不是钻牛角尖的问题,如果我们不去细推,只是简单的应用,是不会达到一个高度的,那样写的代码,也只能说是copy。只有了解了才会用。二楼的例子我说下,假如只是父亲给钱,我们花钱,不了解父亲怎么挣钱,问一句,你了解父亲吗?这样只是钱的关系了,是不会上升亲情的高度的!