关于java接口与多态、继承的思考
来源:互联网 发布:图像分析软件 编辑:程序博客网 时间:2024/05/20 22:40
Java 的接口可以想象成为c++的抽象类, 是java实现多态的一种方法
如果有个类拥有一个接口, 那么这个类就是接口的子类, 即接口是这个类的父类;
如下例
interface PCI{public abstract void start();public abstract void stop();}class GraphicCard implements PCI{private String model;public GraphicCard(String mod) {model = mod;}public void start() {System.out.println("GraphicCard is working");}public void stop() {System.out.println("GraphicCard is stopping");}}class NetworkCard implements PCI{private String model;public NetworkCard(String mod) {model = mod;}public void start() {System.out.println("NetworkCard is working");}public void stop() {System.out.println("NetworkCard is stopping");}}那么GraphicCard、NetworkCard实际上就是PCI接口(类)的子类,如果你学过c++那么这段代码等效于
class PCI{virtual void start();virtual void stop();};class GraphicCard: public PCI{private: String model;public: GraphicCard(String mod) {model = mod;} void start() {System.out.println("GraphicCard is working");}void stop() {System.out.println("GraphicCard is stopping");}};class NetworkCard : public PCI{private: String model;public: NetworkCard(String mod) {model = mod;} void start() {System.out.println("NetworkCard is working");} void stop() {System.out.println("NetworkCard is stopping");}};
c++有些知识忘了, 大体意思如此,或许有疑问,有继承了为啥还要接口,这个问题待会再说;
理解了这步以后以后让我们看下例
主板类例
一个主板可能只有一个插槽, 插槽上可以插网卡、显卡等, 但是怎么实现呢?
package com.abc;interface PCI{public abstract void start();public abstract void stop();}class GraphicCard implements PCI{private String model;public GraphicCard(String mod) {model = mod;}public void start() {System.out.println("GraphicCard is working");}public void stop() {System.out.println("GraphicCard is stopping");}}class NetworkCard implements PCI{private String model;public NetworkCard(String mod) {model = mod;}public void start() {System.out.println("NetworkCard is working");}public void stop() {System.out.println("NetworkCard is stopping");}}/* * 可以定义一系列可以插了主板的卡片..... */class MainBoard{private String model;private PCI slot1; // 实现多态的条件public MainBoard(String mod, PCI card) {model = mod;slot1 = card;}public void setSlot1(PCI card) {this.slot1 = card;}public void work() {slot1.start();}}public class TestMainBorad {public static void main(String[] args) {NetworkCard Nc = new NetworkCard("网卡");GraphicCard Gc = new GraphicCard("显卡");//初始化主板插槽放置显卡MainBoard M1 = new MainBoard("主板", Gc);//显卡开始工作M1.work();//更换主板插槽所放卡片类型M1.setSlot1(Nc);//网卡开始工作M1.work();}}这样你就应该理解接口类型sloat1为什么赋值成NetworkCard 、GraphicCard等类了(即上将接口看做c++中的类 ),这样主板上无论插上显卡还是网卡都能工作了。
至于为什么要有接口,因为Java只允许单继承, 却允许有多个接口, 如上例,NetworkCard如果能够插了手机上(假设), 那么NetworkCard需要继承手机的PCIForMobile类,
然而Java不允许多继承,只好用接口代替。
阅读全文
0 0
- 关于java接口与多态、继承的思考
- 关于“JAVA中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- JAVA关于继承、多态和接口
- JAVA-关于多继承的思考和探讨
- java笔记:关于类与接口的继承
- java的接口与多继承!(转)
- java 类的单继承与接口的多继承
- java的继承与接口
- java接口继承与多态
- Java继承、接口与多态
- Java接口与多继承
- 多重继承与接口的思考(2_of_n)
- 关于java继承与多态的深入理解
- Java中关于继承与多态的一道选择题
- 关于java继承与多态的一个有趣解答
- 关于类的成员与继承的一些思考
- java--抽象类与接口,继承与多态
- java继承与接口
- Spring MVC 拦截器
- 定义自动变量
- 索引
- Java 从入门到精通 笔记一
- Retrofit基本用法和流程分析
- 关于java接口与多态、继承的思考
- “互联网+政务”背景下我国政府形象塑造研究
- SpringBoot框架与短信解决方案
- 心之所向,即为远方
- request进行搜索引擎关键词提交
- High precision Configuration
- 75道程序员逻辑思维面试题
- 图论500题
- Python实现文件内容搜索