java学习--基础知识进阶第二天--笔记

时间:2021-01-24 15:35:09

今日内容
继承
匿名对象和final关键字
抽象类

继承
继承的概述:
现实世界中的继承是儿子继承父辈的财产
Java语言中的继承使类与类之间产生了关系(子父类),子类可以继承父类的非私有的成员,(私有成员不能被继承、构造方法不能被继承也不能被重写,可以被子类调用)

继承体系的由来:
多个类拥有共同的成员变量和成员方法,共同的部分向上抽取到父类中,然后让多个类去继承父类,就形成了继承体系

继承的格式:
class 子类 extends 父类{
}

注:需要使用到extends关键字

继承的特点:
(1)Java中的类只支持单继承,不支持多继承
class A{}
class B{}
class C extends A,B{}// 错误的,这是多继承
(2)Java中的类支持多层继承
class A{}
class B extends A{}
class C extends B{}
(3)子类和父类是一个相对的概念
(4)一个类可以被多个类继承
class A{}
class B extends A{}
class C extends A{}

继承中成员变量的特点:
遵循是就近原则:谁离我近就使用谁
继承中成员方法的特点:
遵循的是就近原则
子类中没有这个方法,就使用父类中的方法
如果子类中重写了这个方法,就使用子类重写之后的方法


this和super关键字:
this:代表的是当前对象的引用
super:代表的是父类的那片空间

this:
(1)当局部变量和成员变量同名时,通过this.的方式标识这是成员变量
(2)调用本类中的成员变量和成员方法
(3)在构造方法中第一行this(参数列表)访问本类中的其他构造方法
super:
(1)在类中调用父类中的成员变量和成员方法
(2)在构造方法中第一行super(参数列表)调用父类的构造方法

继承中构造方法的执行顺序:
先执行父类的构造方法,再执行子类的构造方法

每一个构造方法的第一行默认有一个super(),它调用的是父类的空参构造方法
如果手动给出了this(参数)或者super(参数)这样的代码,手动调用本类中的其他构造方法或者父类的构造方法,默认的super()就没有了

方法重写(Override)和重载(Overload)的区别
重载:在一个类中,方法名相同,参数列表不同(个数不同、类型不同、顺序不同)的方法,和其他(返回值)的无关
重写:在两个类(子父类)中,子类的方法对父类中继承的方法进行了重新实现的过程,方法的声明一般不变化

重写的注意事项:
父类私有的方法不能被重写
父类的构造方法不能被重写

两小
子类重写的方法的返回值类型小于等于父类方法的返回值类型
子类重写的方法抛出的异常要小于等于(少于等于)父类方法抛出的异常
两同
方法名相同
参数列表相同
一大
子类重写的方法的权限大于等于父类方法的权限
public>protected>默认>private

继承的优缺点
优点:
提高代码的复用性
提高代码的可维护性
缺点:
耦合性增强

匿名对象和final关键字
匿名对象
Student s = new Student();
new Student();// 匿名对象

运用场景:
当对象只使用一次的时候

(1)只调用一次方法的情况
new Student().study();
(2)调用方法时当做方法的实参传递
method(new Student());
(3)当做方法的返回值
public static Student method(Student s) {
return new Student();
}

final关键字
final是最终的意思,可以修饰类、方法和变量

final修饰类,该类不能被继承
final修饰方法,该方法不能被重写
final修饰变量,该变量不能被重新赋值,变成了常量

抽象类
抽象类的由来
多个类有共性的内容,将共性的内容向上抽取,得到父类,具体的子类的功能是具体的,但是在父类中没法明确具体的功能
,既然不明确我们就干脆不写方法体,而没有方法体的方法必须使用abstract关键字来修饰,这种称为抽象方法,而有
抽象方法的类必须声明为抽象类。

抽象类的特点:
(1)一个类中如果有抽象方法,该类必须是抽象类
(2)抽象类和抽象方法都是用abstract关键字修饰的
(3)抽象类不能创建对象(不能实例化)
(4)普通类与抽象类的关系是继承关系,抽象类一般都是父类,普通类一般都是继承抽象类
(5)一个类继承了抽象类,必须实现抽象类中的所有抽象方法,否则该类就也必须是抽象类
(6)抽象类中可以有非抽象方法

抽象类中成员的特点:
成员变量
可以有
成员方法
抽象方法,可以有
非抽象方法,可以有
构造方法


abstract关键字不能和哪些关键字共存?
final
private
static