本节内容我们讲类的继承 ,首先,我们对java语言各区域以及修饰以说明。
下面是示例:
public class A{ static静态修饰符只能修饰成员级别
1.属性/静态属性 访问修饰符 public/default/package-private
2.方法/静态方法 顶级和成员级别
3.构造方法 proteced/private 成员级别
4.内部类
成员级别(member-level)
public static void main(String[]args){
方法级别(method-level)
}
}
顶级(top-level)
执行代码则是方法级别
下面我们谈谈引用和对象的生命周期;
引用:一种数据类型,背后含义指向一个对象。在我们的java语言中,98%无法直接看到对象,而是看到的引用。
对象的生命周期:
1.new分配空间
2.初始化时期
3.活跃时期
4.被判定死亡的时期
类的加载
运行时候
1.发生在运行期间。
2.把磁盘上的*.class文件(类字节码文件)载入到内存中的过程。
类加载器(ClassLoader)
3.类被加载到什么区域? 方法区
4.加载的是类的那些信息? 主要是方法语句数据 静态属性 元信息
5.类的加载时间是什么? 懒加载(延迟加载)需要的时候加载
6.那些时候类将会被用到? 1.new对象 2.访问静态属性/方法 3.反射
7.静态属性的初始化顺序 按照书写顺序执行(定义是初始化 静态代码块)
编译期间
做的是将源文件(*.java)转化(编译Compile)为类字节码文件(*.class)
编译时期运行的不是我们的源代码,而是javac的程序,我们的程序只是别人的程序的一个输入。
运行时期
运行的是java....,运行的是我们的程序 java会启动JVM虚拟机
有了前面的铺垫,下面我们进入正题 继承
面向对象的三大特征
1.封装 访问限定符
2.继承
3.多态
继承
目的 :代码的复用性,懒得写代码
继承表达的是一种有关系的类
Class Animal(void speak () {} )
Class brid{}
Class dog{}
继承的语法 类的定义
Class Animal{} 夫类(Parent 类) 基类(Base 类) 超类(Super 类)
Class Bird extends Animal{} 子类(child 类) 派生类(Dervied class)
父类中有属性,与子类有什么关系?
方法的覆写 Override 继承
子类重写父类的一个方法
方法名称相同,形参列表相同,返回类型相同(备注)
特列 允许返回值类型是父类方法类型的子类
List method();
ArrayList method();
访问限定符:不能比父类更加封闭
方法的重载 Overload 方法名称相同 形参列表不同
方法的签名 方法名称+形参列表
覆写/重写(Override)
一定发生在子类上,必须实现和父类
1.方法名称相同+形参列表相同+返回值类型相同的方法
2.目的:针对同一行为,表现出和父类的不同方式
3.访问限定符不能比父类更加封闭
4.一般建议用 @Override注解修饰
5.IDEA 可以用generate code 来自动生成
6.和重载做好区分(Overload)
super关键字 可以对照this看
1.super访问父类的构造方法
2.不是代表父类对象,可以抽象的理解,执行属性属于父类的那部分。
super不是引用 明确调用父类的方法
1.java中类继承,值允许单继承
父类和子类的关系 (涉及到super关键字)
类加载的关系
1)子类的加载必须触发父类
2)父类的加载一定在主类之前
2.对象实例化/构造的关系
子类的对象构造的过程会出发父类中属性的初始化过程。
父类的属性初始化过程一定发生在子类属性初始化之前。
属性的初始化
1)定义时初始化+构造代码块按书写顺序
2)构造方法
和super调用父类的构造方法无关。