接口:接口就是一组功能(能力/规范)
特点:
实现多态,解决了继承的单一继承的问题。
接口的使用案例:
- 对贯穿本书的案例电子宠物系统的类结构进行重构,要求如下:
- 定义Eatable接口,在接口中定义eat()方法,表示吃饭功能
- 定义FlyingDiscCatchable接口,在接口中定义catchingFlyDisc()方法,表示接飞盘功能
- 定义Swimmable接口,在接口中定义swim()方法,表示游泳功能
- 定义抽象类Pet,包括宠物名称(name),健康值(health)和与主人亲密度(love)属性,并提供抽象方法print(),用来输出宠物信息
- 定义狗类Dog,继承Pet类,实现Eatable和FlyingDiscCatchable接口,并重写或实现各个方法。
- 定义企鹅类Pengui,继承Pet类,实现Eatable和Swimmable接口,并重写或实现各个方法。
- 编写测试类,实现狗吃饭、企鹅游泳和狗玩接飞盘游戏的功能,并输出企鹅信息。
代码如下:
package Demo08; public class Dog extends Pet implements Eatable,FlyingDiscCatchable { public Dog(String name,int health,int love){ super(name,health,love); } @Override public void eat() { System.out.println("吃骨头"); } @Override public void catchingFlyDisc() { System.out.println("捡球"); } @Override void print() { System.out.println("我是一只狗,名字是"+name+"健康值是"+health+"亲密度是"+love); } }
package Demo08; public interface Eatable { void eat(); }
package Demo08; public interface FlyingDiscCatchable { void catchingFlyDisc();//接飞盘 }
package Demo08; public class Penguin extends Pet implements Eatable,Swimmable { public Penguin(String name,int health,int love){ super(name,health,love); } public void print() { System.out.println("我是一只企鹅,名字是"+name+"健康值是"+health+"亲密度是"+love); } public void eat(){ System.out.println("吃鱼"); } public void swim() { System.out.println("游泳"); } }
package Demo08; public abstract class Pet { String name; int health; int love; public Pet(String name, int health, int love) { this.name = name; this.health = health; this.love = love; } abstract void print(); }
package Demo08; public interface Swimmable { void swim();//游泳 }
package Demo08; public class Test { public static void main(String[] args) { Dog dog = new Dog("来福",70,80); dog.print(); dog.eat(); dog.catchingFlyDisc(); Penguin penguin = new Penguin("嘻嘻",80,900); penguin.print(); penguin.eat(); penguin.swim(); } }