文章目录
版本一(子类没有各自独有的方法,所有方法都implements自接口)版本二(引入判断子类结构,这样可以调用不同子类所独有的方法)(if_instanceof (subType) superTypeVariable)说明
版本一(子类没有各自独有的方法,所有方法都implements自接口)
package PCI
;
interface PCI {
public abstract void use();
public abstract void open();
public abstract void close();
}
class Video implements PCI {
public void use() {
System
.out
.println("使用显卡");
}
public void open() {
System
.out
.println("视频播放");
}
public void close() {
System
.out
.println("关闭显卡");
}
}
class Voice implements PCI {
public void use() {
System
.out
.println("使用声卡");
}
public void open() {
System
.out
.println("播放音频");
}
public void close() {
System
.out
.println("关闭声卡");
}
}
class Computer {
public void open() {
System
.out
.println("电脑开机");
}
public void close() {
System
.out
.println("电脑关机");
}
public void usePCIDevice(PCI Device
) {
Device
.use();
Device
.open();
Device
.close();
}
}
public class Demo{
public static void main(String
[] args
) {
Computer Pc
= new Computer();
Video video
= new Video();
Voice voice
=new Voice();
Pc
.open();
Pc
.usePCIDevice(video
);
Pc
.usePCIDevice(voice
);
Pc
.close();
}
}
版本二(引入判断子类结构,这样可以调用不同子类所独有的方法)(if_instanceof (subType) superTypeVariable)
package PCI
;
interface PCI {
public abstract void use();
public abstract void open();
public abstract void close();
}
class Video implements PCI {
public void use() {
System
.out
.println("使用显卡");
}
public void open() {
System
.out
.println("视频播放");
}
public void close() {
System
.out
.println("关闭显卡");
}
}
class Voice implements PCI {
public void use() {
System
.out
.println("使用声卡");
}
public void open() {
System
.out
.println("播放音频");
}
public void close() {
System
.out
.println("关闭声卡");
}
}
class Computer {
public void open() {
System
.out
.println("电脑开机");
}
public void close() {
System
.out
.println("电脑关机");
}
public void usePCIDevice(PCI Device
) {
Device
.use();
if (Device
instanceof Video) {
PCI video
= new Video();
video
.open();
} else {
PCI voice
= new Voice();
voice
.open();
}
Device
.close();
}
}
public class Demo{
public static void main(String
[] args
) {
Computer Pc
= new Computer();
Video video
= new Video();
Voice voice
=new Voice();
Pc
.open();
Pc
.usePCIDevice(video
);
Pc
.usePCIDevice(voice
)
Pc
.close();
}
}
说明
由于open方法是usb接口所具有的(public static 为缺省修饰)方法.
而实现自该接口的子类也必然有这个方法
所以可以直接用父类类型的引用变量来直接进行方法调用,属于多态现象.
而为了调用两个子类中特有的方法,就需要通过if_instanceof (subType) superTypeVariable结构判断传入的父类类型的引用变量所多态引用的具体的子类对象的类型,以便调用特定子类的对应的独有方法.