抽象类
在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法,形成抽象类和抽象方法。
-
目标:更简洁高效的形成多态。
-
语法:在类名或方法前面添加关键字abstract。
-
抽象类:无法进行实例化创建对象,只能作为一种特殊的父类,让子类继承并且实现。
-
抽象方法:抽象方法没有方法体。
-
抽象类和抽象方法的关系:
- 抽象类中可以有非抽象类的方法,也不一定有抽象方法。
- 抽象方法必须存在在抽象类中。
- 子类继承了抽象类,就必须重写抽象类的全部抽象方法,否则也必须定义为抽象类。
接口
定义语法:
public interface 接口名 {
// 成员变量(常量) 默认被public static final修饰
// 成员方法(抽象方法) 默认被public abstract修饰 可以省略
}
-
接口没有办法创建对象/实例
-
接口的抽象方法因为是抽象方法,所以也就没有方法体。
-
接口是用来被类实现(implements)的,实现接口的类称为实现类,一个类可以同时实现多个接口。
修饰符 class 实现类类名 implements 接口1, 接口2, 接口3 , ... { //实现类实现多个接口,必须重写完全部接口的全部抽象方法,否则实现类需要定义成抽象类。 }
案例:
//Protectorate interface接口
package com.itheima.animalInterface;
public interface Protectorate {
void protect();
}
//使用接口的Cat类中:
package com.itheima.animalInterface;
public class Cat extends Animal implements Protectorate {
@Override
public void protect() {
System.out.println("猫看家");
}//全部重写接口中的方法
}
JDK8 之后,新增了三种新的方法格式
默认方法(default method)、私有方法(private method,从JDK 9开始支持)和静态方法(static method)
- 默认方法(最重要):
- 语法格式为在方法前面添加 default 默认方法会隐形的添加 Public
- 在接口中的抽象方法如果被default修饰,则必须书写方法体。
- 实现了接口的类可以选择性地覆盖(重写)这些方法,也可以直接使用接口中提供的默认实现
- 私有方法:
- 语法为在方法前添加private
- 在接口中的抽象方法如果被private修饰,则必须书写方法体。
- 该方法用来在接口内部进行工作,外部无法访问和调用
- 静态方法:
- 语法为在方法前添加 static,也会隐形的添加 Public
- 静态方法属于接口本身,而不是接口的任何实现类
- 其不允许被重写,且只能通过接口名的方式进行调用
小结:
默认方法帮助我们实现了面对多个类实现接口时,只需要一部分类实现接口时,无需给所有类进行重写,只需要给抽象方法添加default,且书写完整的方法体,就能实现类似子父类之间的效果。
而私有方法就是接口内部如果有需要自己单独实现的操作,且不希望类进行重写,就可以进行private私有化
对于静态方法就是单纯的通过接口这个类,来实现对外的输出,与子类无关,其和私有方法一样,都不期望与继承子类产生关联。