Java学习第四周
1.多态概念:
多态前提
①:要有继承关系。
②:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。
③:要有父类引用指向子类对象。格式:父 f = new 子();
2.多态中的成员访问特点:
①:成员变量
编译看左边,运行看左边。
②:构造方法
③:成员方法
编译看左边,运行看右边。
④:静态方法
编译看左边,运行看左边。
(静态和类相关,算不上重写,所以,访问还是左边的)
3.多态的好处与弊端:
多态的好处
①:提高了代码的维护性(继承保证)
②:提高了代码的扩展性(由多态保证)
多态的弊端
①不能使用子类特有的功能(需要强制转换)
4.抽象类(abstract):
概念:一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类特点
a:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c:抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?
用于子类访问父类数据时的初始化
d:抽象类不能直接实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
e:抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
5.抽象类成员特点:
①:成员变量:既可以是变量,也可以是常量。
②:构造方法:有。
用于子类访问父类数据的初始化。
③:成员方法:既可以是抽象的,也可以是非抽象的。
成员方法特性:抽象方法会被强制继承.
6.接口:
:接口特点
①:接口用关键字interface表示 格式: interface 接口名 {}
②:类实现接口用implements表示 格式: class 类名 implements 接口名 {}
(PS:一个类可以实现多个接口,接口与类为同一级别)
③:接口不能实例化:可以用多态的方式来实例化。
④:接口的子类
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。
7.接口成员特点:
①成员变量;只能是常量,并且是静态的。
默认修饰符:public static final
建议:自己手动给出。
②构造方法:接口没有构造方法。
③成员方法:只能是抽象方法。
默认修饰符:public abstract
建议:自己手动给出。
8.抽象类和接口的区别:
①:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
②:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
③:设计理念区别
抽象类 被继承体现的是:”is a”的关系。 抽象类中定义的是该继承体系的共性功能。
接口 被实现体现的是:”like a”的关系。 接口中定义的是该继承体系的扩展功能。
PS:JDK1.8之后在接口中提供了用default修饰的方法,可以给出功能的具体实现,子类可以继承下去用
格式:public default void show(){…}
9.关键字整理(个人理解)
private 私有的(权限修饰符),用于修饰成员变量和成员方法,被修饰对象只能在本类中进行调用
this 本类引用,谁调用他即代表谁
super 父类引用,代表调用的父类对象
static 静态,用于修饰类,变量以及方法,被修饰会随着类的加载而加载,被类中所有对象共享
final 最终,用于修饰类,变量以及方法,被修饰对象不能被继承和重写,被修饰变量不能重新赋值
abstract 抽象,用于修饰类和方法,被修饰类的子类强制继承所有被abstract修饰的成员
interface 接口,定义接口的类型作用与class相同
extends 继承,用于建立父子类关系
implements 类实现接口关键字,用于类与接口功能实现的桥梁