天天看点

Java声明定义抽象类_接口_继承_实现声明定义抽象类声明定义接口派生类、抽象类、接口的继承要点

文章目录

  • 声明定义抽象类
  • 声明定义接口
  • 派生类、抽象类、接口的继承要点

声明定义抽象类

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.子类只能继承父类的成员变量和成员方法