第一章 继承
1、继承的含义
1. 面向对象的三大特性
A. 封装性
B. 继承性
C. 多态性
2. 继承用于解决什么问题?
"共性抽取"
3. 继承关系的专业词汇
A. 父类(基类、超类)
B. 子类(派生类)
//通过动物类派生出狗类。 --> 父类是动物类,子类是狗类。狗类继承动物类
2、继承的格式
//父类
class FuLei{
}
//子类 extends 继承
class ZiLei extends FuLei{
}
3、继承当中的成员特点
1. 成员变量(考虑的是重名情况)
A.直接访问:
对象名称.变量名称; //创建对象的时候,等号左边是谁,就优先使用谁!没有则向上找.
B.间接访问:
对象名称.方法名称(参数); 在方法当中有访问成员变量的情况 //看当前调用的方法属于谁,就优先使用谁。
C.三种变量重名问题:
a.局部变量 //直接写变量名称,就可以使用
b.本类成员变量 //采用 this.变量名称 就可以使用(this是用来区分成员变量和局部变量)
c.父类成员变量 //采用 super.变量名称 访问父类的成员变量
2. 成员方法(考虑的是重名的情况) 重名的情况下就是方法的'覆盖重写'
A. 规则:
看等号右边 new 的谁是,就优先使用谁,没有则向上找。
B. 概念:
继承关系,相同方法。方法的覆盖重写。(重写的同名词。'方法的覆盖','方法的复写','方法的重写')
混淆的两个概念:
a.方法的重写: 继承关系,相同方法。 //区分: 两个类(记忆:方法的覆盖重写)
b.方法的重载: 同一个类,名称相同,参数不同。 //区分: 一个类
C.覆盖重写的注意事项"一大一小"
a. "一大" 子类权限修饰符 >= 父类权限修饰符
b. "一小" 子类返回值类型 <= 父类返回值类型
c. 注解,可以校验是否正确的覆盖重写 @Override
//修饰符大小顺序 public> protected > (default) > private
D.方法覆盖重写的应用场景(什么时候需要使用方法覆盖重写)
"当父类方法不能完全满足子类现有需求的时候,就需要使用方法的覆盖重写" //父亲不能满足儿子
3. 构造方法
A. 规则:
在创建子类对象的时候,先执行父类构造,再执行子类构造!(顺序问题)
B. 原因:
在子类当中,可能会使用到父类的成员变量。(父类的成员变量,需要使用父类的构造方法初始化!)
简单拓展一个注解: 防止处女座的同学!(追求完美主义者) 8.23-9.22
@SuppressWarnings("all") //压制类当中所有的警告信息,波浪线。这句话写在类名称上方
4、super关键字和this关键字
1. super 关键字的用法: "super内存图含义:在堆内存当中的 本类里面的父类内容"
A. 成员变量 super.变量名称; //访问父类成员变量
B. 成员方法 super.方法名称(参数); //访问父类成员方法
C. 构造方法 super(参数); //访问父类构造方法。(必须写在构造方法的第一行)
2. this 关键字的用法: "this内存图含义:在堆内存当中的 本类内容"
A. 成员变量 this.变量名称; //访问本类成员变量,如果没有,则向上找父类
B. 成员方法 this.方法名称(参数); //访问本类成员方法,如果没有,则向上找父类
C. 构造方法 this(参数); //访问本类构造方法。(必须写在构造方法的第一行)
5、Java语言继承的特点
"单一继承,多级继承"
1. "单一继承" : 一个类,只能有一个亲生父亲。(只能有一个亲爹)
2. "多级继承" : 一个类,亲爹是唯一。但是还有爷爷,祖爷爷,太爷爷。
第二章 抽象
1、抽象的含义
有些情况下,对于父类而言,它不知道具体方法体的实现,但是必须要有这个方法,这里就是"抽象方法"
//例如: 动物类,必须有"吃的功能"方法,但是并不清楚具体吃什么,只是知道有.这里的吃就是 抽象方法
抽象方法无法明确知道具体的方法体实现,大括号当中,不清楚写什么。
抽象方法所在的类,必须是抽象类!
抽象的关键字 abstract
2、抽象类和抽象方法的定义
//动物类。抽象类(抽象类当中,既可以有抽象方法,也可以有普通方法)
public abstract class Animal{
//抽象方法。没有方法体大括号的
public abstract void eat();
//普通的成员方法
public void say(){
System.out.println("动物叫");
}
}
3、抽象类和抽象方法的使用
方式1: 继承抽象类。把自己变成抽象的
//写一个类,继承抽象类,不做任何实现,直接把自己变成抽象类
public abstract class Cat extends Aniaml{
}
方式2: 继承抽象类。覆盖重写父类的抽象方法
//写一个类,继承抽象类,覆盖重写所有的抽象方法
public class Dog extends Animal{
@Override
public void eat(){
System.out.println("狗吃SHI");
}
}
4、注意事项
1. 抽象类不能创建对象,但是有构造方法。
抽象类当中构造方法作用:在调用儿子构造方法的时候,默认先调用父类构造,这个过程当中,给父亲的成员变量赋值
2. 抽象方法和抽象类关系
A. 抽象方法所在的类 必须是 抽象类
B. 抽象类当中 不一定有 抽象方法