1.概念
继承是面向对象最显著的一个特征
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并扩展新的能力.
Java继承是会用已存在的类的定义作为基础建立新类的技术
新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性的继承父类(超类/基类)
这种继承使得复用以前的代码非常容易,能够大大的缩短开发的周期,降低开发费用.
2.表示
1.子类与父类是继承关系,用关键字extends来表示
2.java只支持单继承,一个子类只能有一个父类
3.子类继承父类以后,相当于把父类的功能进行了复制
4.父类的私有资源,子类不可继承
5.继承具有传递性,爷爷的功能会传给爸爸,爸爸的功能会传给孙子
6.继承是 is a 的关系,要求子类必须是父类的一种继承结构,依赖性非常强,强耦合
例如:
//创建父类animal
class Animal {
int a = 10;
private int b = 100;
public void eat() {
System.out.println("小动物吃啥都行~");
}
}
//创建animal类的子类Cat
class Cat extends Animal {
public void print() {
System.out.println(a);// 子类可以打印父类的非私有属性值a
}
}
三、方法的重写Override
1.方法的重写的意义:是想在不修改源代码的前提下,完成业务的修改。
2.方法的重写遵循OCP原则(Open Closed Principle, OCP),也就是开闭原则。面向修改关闭,面向功能拓展开放,简单来说就是只允许功能拓展,不允许修改原来的代码。
3..重写的语法要求:子类的方法签名[返回值类型&方法名&参数列表]与父类一致,子类必须有权限取重写父类的功能,父类的私有方法无法重写,子类的权限修饰符>=父类权限修饰符。
4.重写并没有修改父类原有的功能,只是子类的业务及进行了修改。
权限修饰符速查表 | ||||
修饰符 | 同类 | 同包 | 子类 | 不同包 |
public | YES | YES | YES | YES |
protected | YES | YES | YES | NO |
默认 | YES | YES | NO | NO |
private | YES | NO | NO | NO |
四、继承中的构造方法
1.构造方法不可以被继承
1.子类创建对象时,默认会访问父类的无参构造
2.在子类构造方法中的第一行,都有一条默认语句super()---调用父类的无参构造
3.当父类没有无参构造时,可以通过super调用父类的其他构造方法。子类的构造函数中必须调用父类的构造函数。
4.子类可以通过这个super关键字使用父类的内容,Super代表的是父类的一个引用对象,在构造方法里,出现的调用位置必须是第一行和this功能差不多,this指的是本类,super指的是父类。
五、final关键字
1.final表示最终,可以用来修饰类,但是被final修饰的类无法被继承 ,也就是说没有子类,它自己就是最终类
2.final可以用来修饰成员变量,被final修饰的变量值不可以被修改---常量
3.final可以用来修饰成员方法,但是被final修饰的成员方法是最终实现,子类不可以重写.
六、static关键字
1.可以通过static关键字将普通资源修饰成静态资源
2.static可以用来修饰成员变量和方法,一般写在权限修饰符之后
3.静态资源可以被类名直接调用(不通过对象)
4.静态资源是优先于对象进行加载的,随着类的加载而加载 ,比对象先记载进入内存,没对象时也可以被类名直接调用
5.静态资源全局共享并且唯一
6.静态资源只能调用静态资源
7.非静态资源既可以调用非静态资源,也可以调用静态资源
七、代码块
静态代码块
1.位置,类里方法外
2.执行时机:随着类的加载而加载,且只加载一次
3.作用:专门用来完成一些需要在第一时间加载并且只加载一次的资源。
构造代码块:
1.位置:类里方法外
2.执行时机:创建对象时立即执行,并且优先于构造方法
3.作用:创建对象时,才会触发,用来提取构造方法中的共性内容
构造方法:
1.位置:类里方法外
2.执行时机:创建对象时立即执行,让构造代码块先执行
3.作用:创建对象时调用,用来创建对象,在构造代码块之后执行
局部代码块
1.位置:方法里
2.执行时机:调用此方法时执行
3.作用:调用其所在方法时才会执行,用于控制变量的作用范围
代码块之间的执行顺序:静态代码块->构造代码块->构造方法->局部代码块