接口特性
1.接口可以多重实现。
2.接口中声明的属性默认为public static final的,也只能是public static final的,
3.接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。
4.接口可以继承其它的接口,并添加新的属性的抽象方法。
5.多个无关的类可以实现同一个接口。
6.一个类可以实现多个无关的接口。
7.与继承关系类似,接口与实现类之间存在多态性。
关键字interface(接口),其实相当于abstract
class(抽象类),而实现(implements)接口相当于继承(extends)父类。本质上是一样的。
interface本质上是一个抽象类。它的属性只能是public static final(即使你不写它的默认类型也是如此),也就是它的成员属于具有final关键字的静态变量,换句话说,它的成员不属于对象的,而是存放在date seg区域的不可访问的常量。(这是为了防止多继承造成的变量重名的情况。) 而它的方法也只能是public并且由于是抽象类的方法,所以该方法本身也是抽象的(abstract)
接着是一段代码:
interface Singer {
public void
sing(); ―――→
定义一个Singer接口,里面有sing()和sleep()方法的声明
public void sleep();
}
interface Painter {
public void paint();
―――→定义一个Painter接口,里面有paint()和eat()的方法的声明
public void eat();
}
class Student implements Singer
{
private String name;
―――→Student实现了Singer接口,增加了一个
Student(String
name){ String类的name,以及重写了Singer接口的方法
this.name = name;
}
public void study(){
System.out.println("student is
studying");
}
public void sing(){
System.out.println("student is
singing");
}
public void sleep(){
System.out.println("student is
sleeping");
}
}
class Teacher implements Singer , Painter {
private String name;
Teacher(String
name){ ―――→Teacher类实现了Singer和Painter接口,也就
this.name =
name; 拥有Singer和Painter里头的方法。并且重写了接口的方法。
}
public void teach(){
System.out.println("teacher is
teaching");
}
public void sing(){
System.out.println("teacher is
singing");
}
public void sleep(){
System.out.println("teacher is
sleeping");
}
public void paint(){
System.out.println("teacher is
painting");
};
public void eat(){
System.out.println("teacher is
eating");
};
} public class Interface {
public static void main(String
args[]){
Singer s1 = new
Student("pipi");
s1.sing();
s1.sleep();
Singer s2 = new
Teacher("gigi");
s2.sing();
s2.sleep();
Painter p = (Painter)s2;
p.paint();
p.eat();
}
}
着重从main方法分析起, Singer s1 = new Student("pipi"); 一个Singer类型的引用变量s1 “指向”一个Student的对象,我的指向加引号意思是由于s1是Singer类型的引用,所以实际上它只看得到Singer接口里头的sing()和sleep()方法,如果加上一句s1.study();那么。程序就会报错,因为study()是Student的方法。
也就是接口也具有多态性。
在看看代码的结构,Student和Teacher都实现了Singer接口,这就是多个无关的类可以实现同一个接口。而Teacher同时实现了Singer和Painter接口,也就是一个类可以实现多个无关的接口。
多态有三个条件:要有继承,要有重写,父类引用指向子类对象