所谓 interface
,就是比抽象类还要抽象的纯抽象接口,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract
的,所以这两个修饰符不需要写出来(写不写效果都一样)。
https://blog.csdn.net/csdn_aiyang/article/details/71171886
接口是对动作的抽象,抽象类是对本质的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人和女人,他们的抽象类是人类,而猫和狗的抽象类是宠物类。人类可以吃东西,宠物类也可以吃东西,但是两者不能混为一谈,因为有本质的区别。这个“吃东西”是一个动作,你可以把“吃东西”定义成一个接口,然后让两个类去实现它的方法。
所以,在高级语言上,一个类只能继承一个类或抽象类,正如人不可能同时是动物类又是植物类,但是可以实现多个接口,例如,吃饭接口、呼吸接口等。
2、使用情况
抽象类不能被实例化,强制性要求子类必须实现抽象方法
接口所有方法,如果抽象类实现接口时,是否被实现都可,但是普通类实现接口,必须实现所有接口方法
a.抽象类 和 接口 都是用来抽象具体对象的,但是接口的抽象级别最高;
b.抽象类可以有具体的方法和属性, 接口只能有抽象方法和不可变常量(final);
c.抽象类主要用来抽象类别,接口主要用来抽象功能;
d.抽象类中抽象方法不包含任何实现,派生类必须覆盖它们。接口中所有方法都必须是未实现的;
e.抽象类实现接口时,接口的方法在抽象类中可以被实现也可以不被实现,而普通实现接口必须实现所有接口方法。
3、使用方向
当你关注一个事物的本质的时候,用抽象类;
当你关注一个操作的时候,用接口。
在抽象类中,抽象方法本质上是定义接口规范:即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。
如果一个抽象类没有字段,所有方法全部都是抽象方法
:
abstract class Person {
public abstract void run();
public abstract String getName();
}
就可以把该抽象类改写为接口:interface。
在Java中,使用interface
可以声明一个接口:
interface Person {
void run();
String getName();
}
所谓interface,就是比抽象类还要抽象的纯抽象接口
,因为它连字段都不能有。因为接口定义的所有方法默认都是public abstract的,所以这两个修饰符不需要写出来(写不写效果都一样)。
当一个具体的class去实现一个interface时,需要使用implements关键字。举个例子:
class Student implements Person {
private String name;
public Student(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println(this.name + " run");
}
@Override
public String getName() {
return this.name;
}
}
我们知道,在Java中,一个类只能继承自另一个类,不能从多个类继承。但是,一个类可以实现多个interface,例如:
class Student implements Person, Hello { // 实现了两个interface
...
}
一个interface可以继承自另一个interface。interface继承自interface使用extends,它相当于扩展了接口的方法
网友评论