Java的接口

今天到接口这里,开始还在回忆到底什么是接口呢。到今天复习完为止,确实也没有深入明白接口到底是什么。因为和抽象类有些相似的地方,以至于现在让人摸不着头脑。所以才先来看今天的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 void	eat(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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值