关于java中的继承

咱们都知道Java中的继承是复用代码、扩展子类的一种方式,继承使得Java中重复的代码可以被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,因此这是一个很是重要的知识点。性能

那么对于继承的知识点,你真的都了解了吗?对象

首先,咱们都知道子类继承父类,就能直接访问父类的公共属性以及受保护属性(public和protected),同时也能直接访问父类的公共方法以及受保护方法;其次,对于父类的私有属性,子类并不能直接访问,可是能够经过父类提供的getter和setter方法进行访问,而父类的私有方法,子类没法直接访问;还有,对于父类的包访问权限属性和方法(default),若是子类和父类在同一个包下,子类能够继承而且直接访问到,若是两者不在同一个包下,则子类没法直接访问到这些方法和属性,可是一样的能够经过父类的getter和setter方法去访问这些属性;最后一点,咱们不少人其实都有疑问,子类继承父类,不是应该继承了父类的全部东西吗,为何访问不到那些私有属性?其实这里要从内存分析来看,当咱们要建立一个子类的对象时,Java虚拟机会先帮咱们生成对应的父类对象,由于咱们都知道,在子类的构造方法中中,首行代码必须是父类构造方法的调用,即经过super关键字来调用,若是不写,则虚拟机会自动帮咱们加入super()(前提是父类有无参构造方法),若是父类没有无参构造方法而有有参构造方法,那么子类的构造方法必须显性的调用父类的构造方法,不然会报错。经过这一点咱们就知道在建立子类对象的时候,Java虚拟机是先建立父类的对象,而后在这个父类对象的基础上加上子类特有的方法和属性,从而建立出子类对象,所以从这里咱们能够得知,子类是拥有父类的全部属性和方法的,可是拥有不表明可以访问!!!父类私有的方法和对象是子类没法直接访问的,子类仅仅是拥有但访问不到!继承

这里补充一下特殊的状况,就是父类中的final属性和方法以及static属性和方法子类是可以继承并直接访问的,可是final的属性子类没法修改,final的方法子类没法重写,说明final修饰的方法并不具有动态绑定;而static的属性和方法会存在隐藏现象,即当子类中出现与父类static变量或者方法同名的变量或者方法时,子类的成员变量和静态方法会被隐藏,如:父类中有public static int nun = 1,而子类中有public static int num = 2,这时候用向上转型的对象(好比Father father = new Son(),其中Father是父类,Son是子类)去输出num属性会发现输出为1!static方法的隐藏理论同属性一致。若是你想调用子类的static方法和属性,你须要定义明确子类(如Son son = new Son())的对象去调用,从这里看出static方法和属性也不支持动态绑定!因此子类并不能重写父类的static方法。内存

以上是我我的对Java继承一些看法,若是有补充或者修改的地方请在评论区指出来,谢谢!get

知识点扩展:Java中的动态绑定,是实现多态的本质,它只针对普通方法,并且仅仅是方法,不包括成员变量那些!因此说若是你用一个向上转型的父类对象去调用父类对象中的非final、非static属性,即便它对应的子类中有同样的属性,最终输出仍是父类对象的属性!最后补充一点,Java中除了final、static、private修饰的方法以及构造器(构造器默认为static)为静态绑定以外,其余方法皆为动态绑定。虚拟机

相关文章
相关标签/搜索