您的位置:首页 > 编程语言 > Java开发

关于java接口与多态、继承的思考

2017-11-13 16:37 399 查看
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不允许多继承,只好用接口代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: