封装: 隐藏实现细节,仅对外暴露公共的访问方式
继承: 类与类之间产生关系(子父类关系), 子类就可以直接使用父类中非私有的成员。
例如:定义printArray () -- 方法的编写者, 对代码功能进行了封装
-
简单理解:我们作为使用者, 不需要关注内部的实现, 只需要关心如何使用即可
实现继承格式
public class Zi extends Fu{}
Zi : 子类(派生类)
Fu: 父类(基类, 超类)
继承的使用场景:
分析需求的时候,发现多个类中存在共性的内容(相同),并且还产生了一种 is...a 的关系,就可以 考虑使用继承来优化代码
-
优点:
-
提高了代码的复用性
-
提高了代码的维护性
-
(让类与类之间产生了关系,是多态的前提)
-
-
缺点:
-
代码的耦合性增强了,类与类之间的关系过于紧密
-
02- 继承中成员的访问特点 - 成员变量
① 如果父类中出现了重名的成员方法,在使用时会根据就近原则,优先使用子类的成员变量。 如果,非要使用父类中的成员方法,可以使用super 关键字类进行区分。
class Fu {
int num = 10;}
class Zi extends Fu {
int num = 20;
public void method(){
int num = 30;
System.out.println(num); //30
System.out.println(super.num); // 10
System.out.println(this.num); // 20
}
}
03- 继承中成员的访问特点 - 成员方法
① 子类继承父类之后,可以继续编写自己的普通方法。
当出现子类中的方法与父类的方法重名时,会先调用子类中大方法,不是就近原则, 是子类重写了父类中的方法。
04 - 方法重写 override
① 定义: 在继承关系中子类中出现了和父类中,方法声明一模一样的方法,就是子类对父类方法的重写。
② 重写的原因是,在子类中需要父类的逻辑,但不想完全继承,而是做一些修改,就可以重写。
③ 注意事项:
父类中private 修饰的方法子类不能重写
子类重写父类的方法时,访问权限需要大于等于父类,最好一致。
权限修饰符:
-
private:同一个类中
-
默认的:同一个类中,同一个包中
-
protected:同一个类中,同一个包中,不同包下子类当中
-
public:任意位置
05- Java 中继承的特点
①Java 只支持单继承,不支持多继承,但是可以多层继承
06- 继承中成员的访问特点(构造方法)
① 构造方法不能被继承,子类需要自己编写构造方法
原因是,构造方法定义格式
public 类名{} 如果继承的话,类名就没有办法保持一致了。
② 子类只要有方法就能完成父类的初始化,子类在初始化的过程之前,需要先完成父类的初始化。 子类的构造方法中都默认存在super()在访问父类的空参构造方法。
07- this 和super
-
this : 调用本类成员
-
this.本类成员变量
-
this.本类成员方法();
-
this(); 调用本类构造方法
-
-
super : 调用父类成员
-
super.父类成员变量
-
super.父类成员方法()
-
super(); 调用父类构造方法
-
注意: this 和super 都必须放在构造方法的第一行位置,两者不能共存
08- final 关键字
① final 表示最终的意思,可以修饰(方法,类,变量)
方法: 不能被重写
类: 不能被继承,但可以有自己的父类
变量: 就变成了常量只能被赋值一次
命名规范:
所有字母大写
eg: MAX MAX_VALUE
基本数据类型: 其数据值不能改变
引用数据类型: 地址值不能改变
成员变量:
赋值时机: 1. 在定义的时候直接赋值(推荐)
2. 在构造方法运行结束之前,完成赋值。