第七天考试,所以没有写学习日记,再加上之前Day03 写重了,所以序号有些凌乱
今天学习了抽象类、接口、内部类相关知识。比较重要的是接口和内部类中的匿名内部类。今天就介绍接口吧,匿名内部类目前还没实际操作过,理解不深
接口和类有些类似,类可以被继承,而接口可以被类实现,看起来二者的功能有些重复了,实际上不是。个人的看法是接口是实现功能的,类是定义属性的。
试想一下,有一个学生类、医生类、音乐家类。我们可以很清晰的得到这三个类特有的属性,但是这三个类的对象的功能却并不是特有的。比如某学生对象“张三”,显然张三的主要任务是学习,但同时张三也可以弹奏乐器、打篮球等。
这时候如果将功能用继承的方式写进父类显然是不合适的,于是就引入了接口的概念。将对象属性封装进类,将对象功能封装进接口。
下面通过代码来看一个例子:我想要描述一组物体:电脑、带USB插口的排插、usb小风扇。要求实现以下功能:
- 带普通插座的能给普通插头的供电
- 带usb插座的能给usb插头使用
- 插头插上电以后可以工作
- 所有物品都有品牌和名称
功能定好之后,首先先进行分类,设计好类和接口是写代码的重中之重。
先提取出类的属性:所有对象都有品牌和名称,因此设计一个电器类作为父类。
在提取出对象的功能:要有usb插座、普通插座、usb接口、普通接口四种功能,因此设计出四个接口。
所以写好父类和接口如下:
这时候我们再来写子类,让他们继承父类属性和实现对应接口方法
最后我们在主方法里把对象生成出来,就行了
执行结果如下
最后如上源代码,方便大家研究,初学者如果说的不到位的还请大佬指正
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接口里");
}
}