文章目录
- 声明定义抽象类
- 声明定义接口
- 派生类、抽象类、接口的继承要点
声明定义抽象类
public abstract class CRMSystem {
public abstract Client add(Client newGuy); //添加用户方法
public abstract Event add(Event e, Client guy); //重载添加事件、用户方法
public abstract Event[] todayEvents(); //今日事件方法
}
说明:
1.抽象类有构造器
2.接口和抽象类不能实例化
3.抽象方法所在的类必须是抽象类(接口是纯抽象类)
4.变量不存在抽象的概念
5.抽象类可以只有抽象方法,没具体方法
6.抽象类可以只有具体方法,没有抽象类,这样设计的目的就是不让调用者创建该类的实例对象
7.抽象类的类体内容可以为空
8.声明定义类的时候,类变量或者成员变量可以不要初始化(可以不赋初始值),创建对象的时候会自动初始化
9.方法内声明的变量则必须初始化,否则会报编译错误
10.抽象类中的抽象方法的访问权限修饰符可以是
public
、
protected
、
default
,但是不可以是
private
。若没有指明访问权限修饰符,默认是
default
声明定义接口
public interface CRMSystem {
Client add(Client newGuy);
Event add(Event e, Client guy);
Event[] todayEvents();
// 默认方法,用来升级接口
public default void myMethodDefault() {
...
}
}
说明:
1.接口中的变量,默认
public static final
,其实就是常量,而且必须赋值
2.接中的方法一定是
public abstract
的(默认,可以不写)
3.如果是 Java 8,还可以额外包含默认方法和静态方法
public default 返回值类型 方法名(参数列表) {方法体} // 默认方法,必须是public,默认是public
public static 返回值类型 方法名(参数列表) {方法体} // 静态方法,不可以是protected,默认是public
4.如果是 Java 9,还可以包含私用方法
private 返回值类型 方法名(参数列表) {方法体} // 私有的普通方法
private static 返回值类型 方法名(参数列表) {方法体} // 私有的静态方法
5.不能通过实现类对象调用接口的静态方法,特别注意了
6.接口不可以有静态代码块和构造器
7.接口体的内容可以为空
派生类、抽象类、接口的继承要点
1.一个类(不论是具体类还是抽象类)只能继承自一个类(不论是具体类还是抽象类),不可以同时继承自多个类,换句话说一个类的直接父类只能有一个,这叫单继承
2.一个类可以多级继承,例如,A 继承自 B,B 继承自 C
3.一个类可以同时实现多个接口
4.一个父类可以有多个子类,即不同的类可以继承自同一个父类
5.接口可以继承自(extends)另外一个接口,也可以同时继承自多个接口
6.实现类如果继承自(extends)一个抽象类,则必须实现抽象类中的全部抽象方法
7.实现类如果实现自(implements)一个接口,则必须实现接口中的全部抽象方法
8.如果声明的是抽象类,继承自(extends)一个抽象类,则可以实现部分的抽象方法,甚至都不实现也行
9. 如果声明的是抽象类,实现自(implements)一个接口,则可以实现部分的抽象方法,且必须至少实现一个抽象方法;也可以全部实现,如果全部实现就必须自己声明至少一个抽象方法才行
10.实现(implements)也是一种特殊的继承关系
11.父类,又叫基类、超类;子类,又叫派生类
12.实现抽象方法,也可以理解为重写(Override)方法
13.子类的成员方法无法直接访问父类的私域(private field)
14.一个实现类同时实现多个接口时,如果不同接口含有相同方法签名的默认方法,实现类必须重写冲突的默认方法
15.一个实现类同时实现多个接口时,如果不同接口含有相同方法签名的抽象方法,实现类只要实现其中一个抽象方法即可
16.一个实现类的直接父类和接口含有相同方法签名的方法时,通过实现类对象调此方法,优先使用直接父类的方法
17.子类无法继承父类的构造器
18.子类无法继承父类的私有变量和私有方法(实际已经继承了,只是不可见而已)
19.子类不能继承父类的静态变量和静态方法
20.子类只能继承父类的成员变量和成员方法