在面向对象中类和类可以存在继承关系。即将若干个类中相同的内容(变量,函数)进行提取,把提取出来的内容放到一个类里面,这个类称为父类,其他几个被抽取的类成为子类。子类与父类之间的关系就是继承关系。一个子类只能有一个父类。在继承的时候子类和父类之间必须符合现实生活中的定义。子类从逻辑上而言应该是父类中的一种从属关系,不能因为代码的重复而忽略逻辑。
在java中也存在继承,并且java是一种典型的单继承语言。即一个类最多只能有一个父类,不能有多个父类。
(2)再对父类的成员变量进行创建并默认初始化-在对象空间中的super空间里
(3)对应子类的构造函数进栈-执行显示初始化(子类父类的成员变量都显示初始化)
寻找的过程为:子类成员变量 -----子类的静态变量------父类成员变量
寻找过程为:函数内部局部变量----子类成员变量----子类的静态变量---父类成员变量
【子父类中构造函数的特点】
子类的构造函数调用的时候,父类的构造函数也执行了,并且在子类构造函数之前,
因为子类的构造函数中,如果第一句不是this(),那么就是super()
super()默认调用的是父类的无参构造函数,但是在执行父类构造函数的时候并没有
创建父类对象,其目的就是为了给子类即将继承的数据进行初始化(显示初始化--针对初始化)
(1)子类构造函数第一句是super()那么直接调用父类的构造函数
(2)子类构造函数第一句是this()----那么还是调用父类的构造函数。
即子类所有构造函数的第一行都有一条隐身的语句super():
1、父类有空参构造函数:没有有参构造时,系统默认给出了,或者有有参构造并
2、如果父类没有空参构造函数:有有参构造函数但是并没有空参构造时,子类在构
造函数第一句又会默认调用父类的空参构造,即调用隐身的super(),此时会编译
public class Son extends Father{
//son继承father
3、方法重写(覆盖):
重写(OverWrite)覆盖(OverRide):发生在继承中,指的是子类在继承父类
的方法后,该方法无法满足子类使用,所以在子类中重写该方法,以达到满足
1、权限修饰符相比于父类的方法,只能扩大或者相等,不能缩小。
4、注解(annotation):
JDK5.0提供的新特性,利用反射技术,可以很轻松使用标注属性、方法、类等。
public class Son extends Father{
@Override//注解,意思是say函数为重写方法
protected void say(){
System.out.println("我宣布一个事");
6、对象的创建流程:
(1)使用java命令将源码(.java)进行编译,生成字节码(.class)文件
(3)将字节码文件加载进虚拟机(JVM),静态方法区开始加载静态资源
(4)JVM从静态方法区读取主函数,并加载进栈(执行栈被创建了出来)
(5)main函数开始执行创建对象的代码Son son = new Son();
(10)父类构造函数执行,为子类继承到的成员变量进行初始化(对象内存空
(12)子类构造函数继续执行,此时先对成员变量进行显式初始化
(14)执行完成,子类构造函数弹栈,将对象的内存空间地址赋予相应的引
(2)再对父类的成员变量进行创建并默认初始化-在对象空间中的super空间
(3)对应子类的构造函数进栈-执行显示初始化(子类父类的成员变量都显
寻找过程:子类成员变量----子类的静态变量----父类成员变量
寻找过程:函数内部局部变量----子类成员变量----子类的静态变量---父类成员变量
关于this()和super():子类的构造函数最终都需要先调用父类的构造函数
(1)子类构造函数 第一句是super()那么直接调用父类的构造函数
(2)子类构造函数 第一句是this()那么调用this(),一直往下,子类的最终被调用
的构造函数不能回调 遇到第一句是super()的构造函数,那么就调用父类的构造
8、字符串格式化的方法:
9、final关键字:
final:最终、最后,可以修饰基本数据类型,引用数据类型,函数,类。
(1)被final修饰的变量,就不能被重新赋值了,就成为了一个常量
定义常量:static final double PI = 3.14 ;//常量的每个字母都要大写
10、内部类:定义在一个类内部的类,叫做内部类。
class Xiumao{
class Lihuamao{
}
11、static关键字静态导包:
如果需要使用一个静态方法,该方法需要导包,可以使用静态导包的方法。如果