笔记总结八
01-继承介绍
-
面向对象三大特征(封装、继承、多态)
-
封装:隐藏实现细节,仅对外暴露公共的访问方式
-
-
-
实现继承的格式:
-
extends
-
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 class Fu {
// 要求方法名和类名保持一致
public Fu (){
}
}
class Zi extends Fu {
// 假设构造方法允许继承,就不能跟类名保持一致
public Fu (){
}
}
-
问题:子类在初始化之前,是否需要先完成父类的初始化?
-
答案:需要,因为子类在初始化的过程中,很有可能要使用父类的数据,如果父类没有提前完成初始化,子类将无法使用这份数据
public class Fu {
int num = 10;
}
class Zi extends Fu{
public Zi(){
System.out.println(super.num);
}
} -
-
问题:子类是如何完成父类初始化的呢?
-
问题:初始化一个对象,执行的是哪一个方法?
-
答案:构造方法!
-
结论:综合来看,子类只要有办法,访问到父类的构造方法,就能完成父类数据的初始化操作
-
-
问题:子类是如何访问到父类的构造方法呢?
-
在所有子类的构造方法中,都默认隐藏了一句话 super() 在访问父类的空参构造方法
-
-
任务:
将Test1包下的代码, 必掌握
将Test2包下的代码, 必掌握
07-this和super
-
this : 调用本类成员
-
this.本类成员变量
-
this.本类成员方法();
-
this(); 调用本类构造方法
-
-
super : 调用父类成员
-
super.父类成员变量
-
super.父类成员方法()
-
super(); 调用父类构造方法
-
注意: this() 和 super() 都必须放在构造方法的第一行位置, 两者都在争夺第一行的位置, 所以, 二者不能共存
08-final 关键字
-
fianl表示最终的意思, 可以修饰 (方法, 类, 变量)
-
方法 :
-
不能被重写
-
-
类 :
-
不能被继承, 但是自己可以有父类
-
-
变量 :
-
就变成了常量, 只能被赋值一次
-
常量的命名规范 :
-
如果是一个单词, 所有字母大写
MAX -
如果是多个单词, 所有字母大写, 中间需要使用下划线分割
MAX_VALUE
-
-
基本数据类型 :
-
其数据值不能改变
-
-
引用数据类型 :
-
地址值不能改变
-
-
成员变量 :
-
赋值时机 :
-
在定义的时候直接赋值
-
在构造方法运行结束之前, 完成赋值
-
-
-
09-抽象类和抽象方法介绍
-
思考的引入 :
-
抽象类就是一个特殊的父类
-
这个父类跟普通的父类有什么区别 ?
-
抽象类中可以定义抽象方法,因此,想要清楚抽象类,必须先理解抽象方法!
-
-
-
抽象方法:
-
将共性的行为(方法)抽取到父类中之后,发现这个行为在父类中无法给出具体明确,而且这个方法还是强制要求子类去做的
-
该方法,就应该改写为抽象方法
-
抽象方法需要存活在抽象类当中
-
-
-
定义格式:
-
抽象方法和抽象类的定义格式:
public abstract class Animal {
public abstract void eat();
} -
10-抽象类注意事项
-
抽象类不能实例化 (不能创建对象)
-
抽象类中有构造方法
-
抽象类中可以编写一般方法
-
抽象类的子类:
-
重写所有抽象方法
-
将子类自己变成抽象类 (不推荐)
-
11-abstract关键字的冲突问题
-
final : 因为被abstract修饰的方法, 强制要求子类重写, 而被final修饰的方法, 子类不能重写, 二者冲突
-
private : 因为被abstract修饰的方法, 强制要求子类重写, 而被private修饰的方法, 子类不能重写, 二者冲突
-
浙公网安备 33010602011771号