- Java只支持单继承,如果我们想封装现实生活中的多继承现象借口可以帮助我们。
- 接口是抽象方法和常量值的集合。
- 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
- 接口定义举例
public interface Runner
{
public static final int id = 1;
public void start(); //不用写abstract
public void run();
public void stop();
}
接口特性
- 接口可以多重实现。
- 接口中声明的属性默认为public static final的,也只能是public static final的。解决C++中多继承出现的问题。
- 接口中只能定义抽象方法,而且这些方法默认为public,也只能时public的。
- 接口可以实现其它的接口,添加新的属性和方法。
- 类可以实现接口通过implements语句,相当于继承。有了重写和继承,如果有interface这个成员变量指向子类对象,就可以实现多态。
- 多个无关的类可以实现同一个接口。
- 一个类可以实现多个无关的接口。多继承。
- 使用什么接口只能看得到它包含的方法
- 接口的引用可以指向所有实现了该接口的类对象。下面例子的Teacher,如果用Painter指向,只能看到paint和eat方法,如果用Singer指向,只能看到sing和sleep方法,相当于换了一个窗口来看Teacher。
- 例子说明
interface Singer
{
public void sing();
public void sleep();
}
interface Painter
{
public void paint();
public void eat();
}
class Student implements Singer
{
private String name;
Student(String name)
{
this.name = name;
}
public void study()
{
System.out.println("studing");
}
public String getName()
{
return name;
}
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)
{
this.name = name;
}
public void teach()
{
System.out.println("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 Main
{
public static void main(String args[])
{
Singer s1 = new Student("le");
s1.sing();s1.sleep(); //多态存在
Singer s2 = new Teacher("steven");
s1.sing();s1.sleep(); //多态存在
Painter p1 = (Painter)s2;
p1.paint();p1.eat(); //多态存在
}
}
输出结果:
student is singing
student is sleeping
student is singing
student is sleeping
teacher is painting
teacher is eating