版本一(子类没有各自独有的方法,所有方法都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结构判断传入的父类类型的引用变量所多态引用的具体的子类对象的类型,以便调用特定子类的对应的独有方法. |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-06-19 ssh远程连接@远程文件传输scp@sftp@Linux查看ip地址的若干种方式