接口就是给出一些没有实现的方法(没有方法体),封装到一起,到某个类要使用的时候,再根据具体的情况把这些方法写出来。
接口中的域必须是常量。接口可以看作是一种特殊的抽象类,但是它与类不同。类是对同一事物的描述,而接口是描述不同类的事物。
如果一个类implement实现 接口,需要将该接口的所有抽象方法都实现,或者将该类定义为抽象类。
接口不能被实例化。
接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰。
一个普通类实现接口,就必须将该接口的所有方法都实现。抽象类实现接口,可以不用实现接口的方法。
接口中属性的访问形式:接口名.属性名
接口不能继承类,但是可以继承多个别的接口。
二、抽象类与接口的比较
从抽象类的定义、接口的定义看,接口和抽象类非常相似,甚至可以相互替换。
但是抽象类和接口不同。抽象类用于表示同一类对象的共同属性和行为,而接口可以表示不同类的对象的属性和行为,这是概念上的不同。接口用于规范不同类的对象所具有的操作,但每类对象的具体操作由具体类定义。
案例:
完成练习(就写了乒乓球运动员):
接口:
//接口
interface Speak{
//说英语
public void speak();
}
Person类----->父类
class Person{
//共同属性
String name;
int gae;
public Person(String name, int gae) {
this.name = name;
this.gae = gae;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGae() {
return gae;
}
public void setGae(int gae) {
this.gae = gae;
}
}
运动员:
//运动员
class Player extends Person{
String studyname;
public Player(String name, int gae, String studyname) {
super(name, gae);
this.studyname = studyname;
}
public String getStudyname() {
return studyname;
}
public void setStudyname(String studyname) {
this.studyname = studyname;
}
public void Study(){
System.out.println("运动员"+getName()+",年龄为:"+getGae()+",正在学习打"+getStudyname());
}
}
乒乓球运动员:
//乒乓球运动员
class Tennis extends Player implements Speak{
public Tennis(String name, int gae, String studyname) {
super(name, gae, studyname);
}
@Override
public void speak() {
//继承父类方法
super.Study();
//重写接口方法
System.out.println("会说英语");
}
}
实现类:
public static void main(String[] args) {
Tennis tennis=new Tennis("Tom",28,"乒乓球");
tennis.speak();
}
输出结果: