P148 继承的概述
没有继承,就没有多态!
—》继承的重要性!
继承主要干什么:共性抽取!!
父类?==》基类、超类
P153 继承的格式
is-a关系,“子类可以被当作父类看待”
- 如:父类是员工,子类是讲师==》“讲师就是一个员工”
- “ 子类就是父类”
子类格式:
public class 子类名称 extends 父类名称{}
父类格式:
普通类的格式
子类可以调用父类的方法(因为继承了父类的方法)
达到代码复用的效果
P154 继承中成员变量的访问特点
成员变量:
一个类中的private成员
private成员只能本类对象访问
当父类和子类有同名成员变量时:
- 直接:通过子类对象访问成员变量
-
等号左边是谁,就用谁!(谁调用就用谁的!)
- 间接:通过成员方法访问成员变量
-
要看这个方法是谁的!【看是谁定义的】(子类都可以调用,但是调用出来的结果可能是父类中的变量值)
P155 区分子类方法中重名的三种变量
局部变量/苯类的成员变量/父类的成员变量
public class Zi extends Fu{
int num=20;
public void method() {
int num=30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
P156 成员方法的访问特点
子类对象访问成员方法的规则:
- 创建的是哪个对象,优先用哪个的方法
- 如果没有,就向上找
- 绝对不会向下(子类)找!!
P157 继承中方法的覆盖重写
什么是重写:
名称和参数列表都一样/也叫覆盖/覆写
重载:
名称一样,参数列表【不一样】
P158 覆盖重写的注意事项
1、覆盖重写时,必须保证父子类方法名称相同!可用@override:
- 可写可不写
- 最好写上,检测是不是有效的正确覆盖重写
2、返回值类型有限制:
- 返回值类型:子类的返回值范围必须<=父类的返回值范围
-
如:Object>String
3、子类方法的权限必须》=父类方法的权限修饰符
- public>protected>(Default)>private
default不是关键字,表示什么都不写
P159 什么场景应用覆盖重写
老款手机—》新款
- 需要该一部分
- 定义一个新类,重写方法即可===>这样可以保留原有的可以的方法
- 要用父类的旧方法时:
-
super.xxxx;
P160 继承中构造方法的访问特点
创建一个子类对象时:
- 有一个默认的父类构造函数!
- 后再调用子类构造函数
无父,就无子
子类构造方法中,有一个默认隐含的“super()”调用
👇
一定是先调用父类的构造
super():
- 这是在调用父类无参构造函数
- 只有在子类构造方法中,才可以写这条语句(调用父类构造方法
- 在子类中必须是第一条语句
- 不能一个子类调用多次super构造
P161 super关键字的三种用法
都是在子类中使用,访问父类的xxx:
- 成员方法中,访问父类的成员变量
- 成员方法中,访问父类的成员方法
- 构造方法中,访问父类的构造方法
P162 this关键字的三种用法
在一个类的成员方法中使用,访问本类的xxx:
- 本类的成员方法中,访问本类的成员变量
- 本类的成员方法中,访问本类的另一个成员方法
- 本类的构造方法中,访问本类的另一个构造方法
==this(另一个方法中的参数)==即可,无需this.
注意:构造调用另一构造:this()调用至多只能有一个,且放在第一句
构造函数中,super()和this()两种不能同时使用(因为都只能放在第一句)
P163 super与this关键字
看不进去
P164 继承的特点
java是单继承==》只能有一个爸爸!(指直接继承中
class A{}
class B extends A{}//√
class C{}
class D extends A,C{}//×
但是可以【多级继承】
- 当爷爷即可
class A{}
class B extends A{}//正确
class C extends B{}//正确
A成为了C的间接父类
一个父类可以有很多子类==》可以生二胎/有很多兄弟姐妹
class A{}
class B extends A{}//正确
class C extends A{}//正确