interface中的default关键字
interface是更高级的抽象类
可以把interface理解为纯度更高的抽象类,接口中不能定义实例属性且要求所有方法都是public abstract的。
如下就是接口,但是默认接口都是抽象的,接口方法都是 public abstract
的,所以写出这些关键字是多余的。
abstract interface Person {
public abstract void run();
public abstract String getName();
}
去掉默认的多余关键字,如下:
interface Person {
void run();
String getName();
}
一般使用高层的接口去接收实现接口的实例对象,如下:
List list = new ArrayList(); // 用List接口接收具体子类的实例
接口中不能定义实例属性,也不需要,因为接口本来就是专门用于存放方法的定义,所以下面写法是错误的
interface Person {
int age ;
void run();
}
接口无法存放实例属性,但是可以存储对外开放的静态常量(static修饰的表示属于类而非实例,也就是多个实例共享;final修饰则不可修改,表示常量)。这种应用场景并不多见,用法如下所示:
interface Person {
// 编译器会自动加上public statc final:
int MALE = 1;
int FEMALE = 2;
void run();
}
class Student implements Person{
private String name;
public Student(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Student run");
}
}
class Teacher implements Person{
private String name;
public Teacher(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Teacher run");
}
}
public class Hello {
public static void main(String[] args) {
System.out.println(Person.MALE); // 1
System.out.println(Person.FEMALE); // 2
}
}
interface中的default关键字
接口中一般只能存放方法的定义,强制子类去实现接口方法。但是如果存在这样的方法,所有子类对它的实现都是一样的,也就是在子类中不需要去复写该方法,我们可以把它的实现写在接口中,不过需要使用interface中的default关键字修饰。
interface Person {
void run();
default void actual(){
System.out.println("Whatever my profession, I am a human.");
}
}
class Student implements Person{
private String name;
public Student(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Student run");
}
}
class Teacher implements Person{
private String name;
public Teacher(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Teacher run");
}
}
public class Hello {
public static void main(String[] args) {
Person s1 = new Student("小明");
Person t1 = new Teacher("林老师");
s1.run(); // Student run
s1.actual(); // Whatever my profession, I am a human.
t1.run(); // Teacher run
t1.actual(); // Whatever my profession, I am a human.
}
}
他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!