概述
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接口与多态、继承的思考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复