有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多继承,就有了接口,就可以得到多重继承的效果。
接口是抽象方法和常量值的定义的结合;
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只含有常量和方法的定义,而没有变量和方法的实现;
实现接口类:class SubClass implements interfaceA{}
一个类可以实现多个接口,接口亦可以继承其它接口;
接口的特点:
- 用Interface来定义;
- 接口中的所有成员变量都默认是由public static final 修饰的;
- 接口中的所有方法都是默认由public abstract修饰的;
- 接口没有构造器;
- 接口采用多层继承机制;
接口定义举例:
public interface Runner{ int ID = 1; void start(); run(); stop(); }
实现接口的类中必须提供接口中的所有方法的具体实现,方可实例化,否则需要声明为抽象类;
接口的主要作用是被实现类实现;
与继承关系类似:接口和实现类中间存在多态性;
当存在继承和实现关系时,先继承后实现;
抽象类在新增抽象方法时存在问题:父类新增抽象方法,子类必须实现该抽象方法,否则子类必须声明为抽象类;
解决方法:新建一个接口,接口中为该抽象方法,让子类去实现;
举个例子:会唱歌的厨师是个好老师。
如果用抽象类来实现:老师--继承--厨师--继承--歌者--继承--人,但是老师、厨师、歌者之间并没有相应的关系;
如果用接口实现:老师--继承--人,然后老师实现厨师接口,老师实现歌者接口;
Person.java
package inf; abstract class Person { String name; int age; sex; showInfo(); }
Cooking.java
Cooking { fry(); }
Singing.java
Singing { singing(); }
SCTeacher.java
class SCTeacher extends Person implements Cooking,Singing{ String course; setInfo() { super.name = "tom"; super.age = 12super.sex = 1this.course = "数学"; } showInfo() { System.out.println("姓名:"+super.name +"\n"+"年龄:"+super.age+"\n" +"性别:"+.sex); System.out.println("教的课程是:"+this.course); } fry() { System.out.println("老师的炒菜很好"); } singing() { System.out.println("老师的唱歌很好"); } }
Main.java
Main { static main(String[] args) { SCTeacher sc = new SCTeacher(); sc.setInfo(); sc.showInfo(); sc.fry(); sc.singing(); // Cooking c = new SCTeacher(); c.fry(); } }
输出:
姓名:tom
年龄:12
性别:1
教的课程是:数学
老师的炒菜很好
老师的唱歌很好
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。