public interface Runner { //接口中的变量都是静态常量,因此可简写为int id = 1; public final static int id = 1; /* 由于是接口,在定义方法时不需要像抽象类一样加abstract关键字 */ public void start(); public void run(); public void stop();}2、从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
3、接口的特性:1)多个无关的类可以实现同一个接口。public interface Lock { public void lockUp(); //上锁功能 public void openLock(); //开锁功能}/** * 防盗门 类 */public class FtPRoofDoor implements Lock { @Override public void lockUp() { System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。"); } @Override public void openLock() { System.out.println("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。"); }}/** * 智能手机 类 */public class AptitudeHandset implements Lock { @Override public void lockUp() { System.out.println("手指按下电源键,手机锁上了。"); } @Override public void openLock() { System.out.println("手指放在Home键上,手机解锁了。"); }}总结:多个无关的类可以实现同一个接口。
2)一个类可以实现多个无关的接口。与3)同例:3)继承关系类似,接口与实现类之间存在多态性。/** * 能唱歌的东西 接口 */interface Sinner { public void sing(); public void sleep();}/** * 能画画的东西 接口 */interface Painter { public void paint(); public void eat();}/** * 学生 类 */class Student implements Sinner { 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 Sinner,Painter { private String name; Teacher(String name) { this.name = name; } public String getName() { return name; } 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 sleep"); } public void paint() { System.out.println("Teacher is painting"); } public void eat() { System.out.println("Teacher is eating"); }}public class TestInterface { public static void main(String[] args) { Sinner s1 = new Student("le"); s1.sing(); s1.sleep(); Sinner s2 = new Teacher("steven"); s2.sing(); s2.sleep(); Painter p1 = (Painter)s2; p1.paint(); p1.eat(); }}运行结果:
student is singingstudent is sleepingTeacher is singingTeacher is sleepTeacher is paintingTeacher is eating总结:a、继承关系类似,接口与实现之间存在多态性。b、一个类可以实现多个无关的接口(Teacher类实现了两个Sinner和Painter这两个无关的接口)。c、指向子类对象的A接口的引用,可以强制类型转换为接口B类型,将地址值传递给接口B的引用后,接口B的引用就同样可以指向子类对象,实现多态。即Sinner s2 = new Teacher();Painter p1 = (Painter)s2;p1.paint(); //多态机制,调用子类重写的方法。4)接口不能被实例化,因此没有构造方法。5)接口中声明属性默认为public static final的,也只能是public static final。6)接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。7)与类的继承一样,接口可以使用extends关键字继承其它的接口,并添加新的属性和方法。
8)一个类可以在继承一个父类的同时并实现多个接口。
package com.hpe.interfa;public interface Valuable { public double getMoney();}interface Protectable { public void beProtected();}/* 接口和接口之间只能是继承关系 */interface A extends Protectable { void m();}abstract class Animal { private String name; abstract void enjoy();}/* 一个类可以在继承类的同时实现多个接口 */class GoldenMonkey extends Animal implements Valuable, Protectable { public void enjoy() {} public double getMoney() { return 10000; } public void beProtected() { System.out.println("I live in the room."); } public void test() { /* 1.父类引用指向子类对象 */ Valuable v = new GoldenMonkey(); /* 多态机制,调用子类方法 */ v.getMoney(); /* 2.强制类型转换,跳到子类内部的另一个父类 */ Protectable p = (Protectable)v; /* 多态机制,调用子类方法 */ p.beProtected(); /* 3.强制类型转换,跳到子类内部的另一个父类 */ Animal a = (Animal)p; /* 多态机制,调用子类方法 */ a.enjoy(); }}/* * 一个类实现了一个接口,如果该接口继承至另一个接口, * 那么该类必须实现两个接口中的所有方法 */class Hen implements A { public void m() {} public void beProtected() {}}
新闻热点
疑难解答