我是靠谱客的博主 傻傻小蜜蜂,最近开发中收集的这篇文章主要介绍关于java接口与多态、继承的思考,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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不允许多继承,只好用接口代替。

最后

以上就是傻傻小蜜蜂为你收集整理的关于java接口与多态、继承的思考的全部内容,希望文章能够帮你解决关于java接口与多态、继承的思考所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部