接口
java只支持单继承,例如猪是食物,猪还是动物,我要完成这个多继承的关系, 只时候,我们需要用到接口
- 接口(interface)是抽象方法和常量值的定义的集合
- 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现.
- 接口定义举例:
public interface Runner { public static final int id = 1; public void start() ; //接口中不用谢abstract,但是都是方法. public void run() ; public void stop(); }
//为什么要定义成public static final?C++中多继承关系中存在多个父类对象中的相同的成员变量,容易出现问题,java中要去避免这种情况,放到static中.
接口特性
- 接口可以多重实现
- 接口中声明的属性默认是public static final的,也只能是这三个.
- 接口中只能定义抽象的方法,这些方法默认是public的,也只能是public的.(为了避免C++中出现的问题)
- 接口可以继承其他的接口,并添加新的属性和抽象方法.
- 多个无关的类可以实现同一个接口
- 一个类可以实现多个无关的接口
- 与继承关系类似,接口与实现类之间存在多态性.
- 定义Java类的语法格式
接口举例
interface Singer { public void sing(); public void sleep(); } //定义一个能唱歌的东西,不同种类的不确定,所以用抽象 class Student implements Singer { //因为以上用的是interface,不能extends private String name; Student(String name) { this.name = name ; } public void study() { System.out.println("studying"); } public String getName() (return name;) public void sing() { System.out.println("student is singing"); } public void sleep() { System.out.println("student is sleeping"); } }
//存在继承关系,存在重写,如果在存在父类对子类对象的应用,则为多态.
interface Singer { public void sing(); public void sleep(); } //定义一个能唱歌的东西,不同种类的不确定,所以用抽象 interface Painter { public void paint(); public void eat(); } class Student implements Singer { //因为以上用的是interface,不能extends private String name; Student(String name) { this.name = name ;} public void study () {System.out.println("studying"):} 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{}
//所有的方法要全部实现,重写.
存在多态关系的时候,所有方法的重写在code segment里,而字符串变量和静态变量储存在data segment里面.实现动态引用(为一个函数指针C++);
这个部分可以看作多态的延伸.
每个接口对应的是部分的方法.
f(singer s) {
s.sing();
} //注意这个时候这个方法,无论是调用student 还是tercher,都可以.但是要重写这个方法.多态的实现.所以接口是那个抽象的类,多重继承,也没有C++的毛病.
使用接口我们实现了多继承性,实现多继承性,打好多态的基础.无论属性再多,永远要记得,继承性.重写,按部就班.
Interface Comparable
compareto 比较对象的大小.输出一个返回值.
我先定义一个方法,实现这个接口之后比较所有的大小,无视类型,排序,扩展性.