c语言 usb接口 代码_26岁转行程序员的成长历程--Day08--接口和类的区别

第七天考试,所以没有写学习日记,再加上之前Day03 写重了,所以序号有些凌乱

今天学习了抽象类、接口、内部类相关知识。比较重要的是接口和内部类中的匿名内部类。今天就介绍接口吧,匿名内部类目前还没实际操作过,理解不深

接口和类有些类似,类可以被继承,而接口可以被类实现,看起来二者的功能有些重复了,实际上不是。个人的看法是接口是实现功能的,类是定义属性的。

试想一下,有一个学生类、医生类、音乐家类。我们可以很清晰的得到这三个类特有的属性,但是这三个类的对象的功能却并不是特有的。比如某学生对象“张三”,显然张三的主要任务是学习,但同时张三也可以弹奏乐器、打篮球等。

b44508a754af51d40f32cd761d3147f1.png
对象属性是唯一的,但是对象的功能却是共享的

这时候如果将功能用继承的方式写进父类显然是不合适的,于是就引入了接口的概念。将对象属性封装进类,将对象功能封装进接口。

下面通过代码来看一个例子:我想要描述一组物体:电脑、带USB插口的排插、usb小风扇。要求实现以下功能:

  • 带普通插座的能给普通插头的供电
  • 带usb插座的能给usb插头使用
  • 插头插上电以后可以工作
  • 所有物品都有品牌和名称

功能定好之后,首先先进行分类,设计好类和接口是写代码的重中之重。

先提取出类的属性:所有对象都有品牌和名称,因此设计一个电器类作为父类。

在提取出对象的功能:要有usb插座、普通插座、usb接口、普通接口四种功能,因此设计出四个接口。

ba9851635e52a476ed5c60f045068882.png

所以写好父类和接口如下:

dd6c9cc81d888d39a2740252a566b2c7.png

d6a75dacae20e81f4da9038bca41e686.png

这时候我们再来写子类,让他们继承父类属性和实现对应接口方法

8f8a6a1e84e1f6180841ffac73019b3e.png

c08d39ffcd0f8554978403bee7df2b94.png

a59294015d5f6354c93fe293321901f0.png

5f654e8628e5acb871139808fe2c2421.png

最后我们在主方法里把对象生成出来,就行了

8deaaf95a53e1e769150c6e406cc0d4b.png

执行结果如下

7ccd1a9f532876fca31ad6c987706f22.png

最后如上源代码,方便大家研究,初学者如果说的不到位的还请大佬指正

package cn.sxt.interface2;



	public class TestInterface {
		public static void main(String[] args) {
			Computer computer = new Computer("电脑","联想");
			GeneralSocket soc = new GeneralSocket("排插","公牛");
			Fan fan = new Fan("USB小风扇","美的");
			
			soc.power(computer);
			computer.plugIn(soc);
			soc.usbPower(fan);
			fan.usbPlugIn(soc);
			computer.usbPower(fan);
			fan.usbPlugIn(computer);
		}
	}

	//普通插头接口
	interface Plug{
		void plugIn();
	}
	//USB插头接口
	interface UsbPlug{
		void usbPlugIn();
	}
	//普通插口
	interface Socket{
		void power(Plug plug);
	}
	//USB插口
	interface UsbSocket{
		void usbPower(UsbPlug usbP);
	}
	
	class Mechine{
		String name;
		String brand;
		
	}
	
	
	//联想电脑,带普通插头的,并带有USB插口
	class Computer extends Mechine implements Plug,UsbSocket{
		public Computer(String name,String brand) {
			this.name = name;
			this.brand = brand;
		}
		@Override
		public void plugIn() {
			System.out.println(brand+name+"通上电了,开机工作!!");
		}

		@Override
		public void usbPower(UsbPlug usbP) {
			usbP.usbPlugIn();
		}
		public void plugIn(Mechine mec) {
			System.out.println(brand+name+"插在了"+mec.brand+mec.name+"的USB接口里");
		}
	}

	//插座类,带普通插口和USB插口
	class GeneralSocket extends Mechine implements Socket,UsbSocket{
		public GeneralSocket(String name,String brand) {
			this.name = name;
			this.brand = brand;
		}
		@Override
		public void usbPower(UsbPlug usbP) {
			usbP.usbPlugIn();
			
		}

		@Override
		public void power(Plug plug) {
			plug.plugIn();
			
		}
		
		
	}
	// 美的Usb小风扇,带USB插头
	class Fan extends Mechine implements UsbPlug{
		public Fan(String  name,String brand) {
			this.name = name;
			this.brand = brand;
		}
		@Override
		public void usbPlugIn() {
			System.out.println(brand+name+"插上了电,开始转动!!");
			
		}
		public void usbPlugIn(Mechine mec) {
			System.out.println(brand+name+"插在了"+mec.brand+mec.name+"的USB接口里");
		}
		
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值