Java的接口

来源:互联网 发布:淘宝打印电子面单流程 编辑:程序博客网 时间:2024/06/06 07:14

今天到接口这里,开始还在回忆到底什么是接口呢。到今天复习完为止,确实也没有深入明白接口到底是什么。因为和抽象类有些相似的地方,以至于现在让人摸不着头脑。所以才先来看今天的work吧。

今天的work_1是熟悉接口,设计实现一个发声接口

package Java的接口;/*此例说设计和实现一个Sound接口,该接口具有发声功能,同时还能调节声音大小*/public interface work_1_Sound {//发出声音public void makeSound();//降低音量public void decreaseSound();//增大音量public void stopSound();//接口和抽象类看起来实现方式是一样的哦}
接口的设计就是这样interface定义,在接口里面只需要有函数的声明即可。

接口的这些功能将会有一个对象类来实现

package Java的接口;public class work_1_Radio implements work_1_Sound{public void makeSound() {System.out.println("收音机为您服务~");}public void decreaseSound() {System.out.println("降低收音机音量");}public void stopSound() {System.out.println("关闭收音机");}}
链接接口用implements来实现。

这里人家还用了一个应用程序类来实现接口的功能

package Java的接口;public class work_1_SoundDisplay {public void display(work_1_Sound sound){sound.makeSound();sound.decreaseSound();sound.stopSound();}}
这里是初始化了一个接口对象sound,这样是可以的哦?因为是最后这里的参数就已经都是子类的实例了的原因吧

package Java的接口;import java.util.Scanner;public class work_1_test {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.println("您想听什么:0-收音机 1-随声听 2-手机");int choice;choice=input.nextInt();work_1_SoundDisplay sd=new work_1_SoundDisplay();switch (choice) {case 0:sd.display(new work_1_Radio());break;case 1:sd.display(new work_1_Walkman());break;case 2:sd.display(new work_1_Phone());break;default:System.out.println("没有您的选择");break;}}}
仅仅new接口类是不可以的,一定是要其下的一个子类的实例,所以work1它说调小音量,那么这些设备一定会有调小音量此功能的,这就是所谓的从顶到下吧。

而抽象类是子类们都有的东西,可以用抽象类父类来表示。这就是所谓从底到上吧。

再来看看work_2,work_2又是饲养员喂动物的问题。所以先上运行实例:

——————————————————

欢迎来到动物园
我是饲养员纯纯
福贵正在吃香喷喷的骨头
汪汪汪~
二蛋正在吃香嘭嘭的金枪鱼
喵喵喵~

——————————————————

嗯最后要的就是在饲养员给喂食后,动物们发出欢快的叫声

首先三个类是必须有的,饲养员(feeder),动物(animal),食物(food)

食物里面有鱼,但是鱼同时也是动物,因此可以将food定义为接口,而鱼又可以继承animal。

所以分析完毕以后,构造出UML类图

Food最终还是选择了作为接口。上面那个animal是抽象类,所以类名和抽象方法应是斜体字。

package Java的接口;/*又是一个模拟饲养员喂动物,喂完动物之后动物们会开心的发出声来*/public abstract class work_2_Animal {private String name;private int age;public work_2_Animal(String n,int a){this.name=n;this.age=a;}public abstract void shout();public abstract void eat(work_2_Food food);public void setName(String n) {this.name=n;}public String getName() {return name;}public void setAge(int a ) {this.age=a;}public int getAge(){return age;}}
所以抽象这个动物类没有大问题,今天是看到,抽象类里面也可以有构造函数。因为这里已经是想好的父类了。

package Java的接口;public interface work_2_Food {public abstract String getName();}
而被选为接口的Food类包含了一个抽象的方法

package Java的接口;public class work_2_Fish extends work_2_Animal implements work_2_Food{public work_2_Fish(String n, int a) {super(n, a);}public void shout(){}public void eat(work_2_Food food) {}}package Java的接口;public class work_2_Bone implements work_2_Food{private String n;public work_2_Bone(String n){this.n=n;}public String getName(){return n;}}package Java的接口;public class work_2_Cat extends work_2_Animal{public work_2_Cat(String name,int age){super(name, age);}public void shout(){System.out.println("喵喵喵~");}public voideat(work_2_Food food){System.out.println(getName()+"正在吃香嘭嘭的"+food.getName());shout();}}package Java的接口;public class work_2_Dog extends work_2_Animal{public work_2_Dog(String n, int a) {super(n, a);}public void shout(){System.out.println("汪汪汪~");}public void eat(work_2_Food food){System.out.println(getName()+"正在吃香喷喷的"+food.getName());shout();}}
以上两两分为是animal和food的子类,值得注意的是,fish不仅extends了animal而且implements了food,这是关键所在,让我们体会继承和接口一起使用的节奏。

package Java的接口;public class work_2_Feeder {private String name;public work_2_Feeder(String n){this.name=n;}public void say() {System.out.println("欢迎来到动物园");System.out.println("我是饲养员"+getName());}public void feed(work_2_Animal a,work_2_Food f) {a.eat(f);}public String getName() {return name;}public void setName(String n) {this.name=n;}}package Java的接口;public class work_2_Test {public static void main(String[] args) {work_2_Feeder feed=new work_2_Feeder("纯纯");feed.say();work_2_Dog dog=new work_2_Dog("福贵", 6);work_2_Food fod=new work_2_Bone("骨头");feed.feed(dog,fod);work_2_Cat cat=new work_2_Cat("二蛋", 5);work_2_Food fd=new work_2_Fish("金枪鱼",2);feed.feed(cat, fd);}}
饲养员类也没有什么毛病,主类里的测试也照常进行。

这里抽象定义了动物

而接口则表达了食物和动物的联系

到这段时间的巩固学习为止,这几天的内容算是第一大重点和难点了吧。

网上各种 学习,主要最后还是要转化成自己的话,自己的理解,自己表达出来。

所以说,

鱼,本质上可以说是动物类,但是它也具有当作食物被吃的行为。

鱼应该很开心。





0 0