上次简单说了一下java中面向对象思想中的封装,今天咱们来讲一说继承。 先说一下继承的概念。java
一继承的概念编程
在面向对象编程中,能够经过扩展一个已有的类,并继承该类的属性和行为,来建立一个新的类,这种方式称为继承(inheritance).jvm
二对于初学者,可能有一点比较模糊,就是继承时,父类子类的初始化顺序。设计
从类的结构上而言,其内部能够有以下四种常见形态:属性(包括类属性和实例属性)、方法(包括类方法和实例方法)、构造器和 初始化块(包括类的初始化块和实例的初始化块)。对于继承中的初始化顺序,又具体分为类的初始化和对象的初始化。 类初始化: 在jvm装载类的准备阶段,首先为类的全部类属性和类初始化块分配内存空间。并在类首次初始化阶段中为其进行初始化,类属性和类初始化块之间 的定义时的顺序决定了其初始化的顺序。若类存在父类,则首先初始化父类的类属性和类初始化块,一直上溯到Object类最早执行。 对象初始化: 在new建立对象时,首先对对象属性和初始化块分配内存,并执行默认初始化。若是存在父类,则先为父类对象属和初始化块先分配内存并执行初始化。 而后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块执行初始化。 注:对象
三继承的优势继承
1.代码的可重用性 2.子类能够扩展父类的属性和方法 3.父类的属性和方法可用于子类 4.设计应用程序变得更加简单内存
四在有继承关系的两个类中博客
private(私有)能够被继承,但没法访问和覆盖,即便在子类中覆盖了父类的方法,在多态里面仍然会调用父类的方法。 静态方法有继承无覆盖,覆盖发生在对象的成员方法中,也就是发生在堆内存中,可是静态数据都是在静态内存块中。it
五 发生覆盖的条件:面向对象编程
1 发生在有继承关系的两个类之间 2 方法必须具备相同的方法名,返回值类型,参数列表(若是参数列表不一样,系统会默认这两个重载后的不一样的两个方法) 3 重写的方法不能比被重写的方法有更低的访问权限 4 重写的方法不能比被重写的方法抛出更宽泛的异常 5 私有方法不能被覆盖,不调用不报错,调用就报错 6 构造方法没法被覆盖,由于构造方法不能被继承 7 静态方法不存在覆盖,继承是对象的继承,而不是类的继承。静态方法进入内存之后,不会再有新的内存变化,因此没有覆盖这一说。 8 覆盖指的是成员方法,和成员变量无关。
继承这个概念大多仍是一些概念性的文字各位看官可能以为有一点枯燥,大体看一下就好,有错误敬请指出,鄙人感激涕零。还请继续关注本人的博客,下一篇,多态。