关于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不允许多继承,只好用接口代替。
如果有个类拥有一个接口, 那么这个类就是接口的子类, 即接口是这个类的父类;
如下例
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中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- 关于JAVA继承、多态、抽象类、接口等性质的学习(1)
- JAVA关于继承、多态和接口
- 关于JAVA继承、多态、抽象类、接口等性质的学习(3)
- 关于JAVA继承、多态、抽象类、接口等性质的学习(2)
- java总结(之五)-- 类与接口、多态与继承
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍
- 黑马程序员——Java基础:继承、final关键字、抽象、接口、多态
- 黑马程序员----java-----继承,接口,多态。
- Java基础学习中,关于面向对象中多态、抽象类、接口的总结
- Java第4次实验提纲(面向对象2-继承、多态、抽象类与接口与Swing)
- java 继承和多态 抽象类和接口
- java 中什么时候用抽象类,什么时候用 接口(面向对象的继承与多态)
- Java中继承、接口、多态的作用详解(纯理论)
- Java继承、抽象、接口、多态
- java--抽象类与接口,继承与多态
- 2018/01/07JAVA 基础 / 接口与继承:多态的概念、接口的意义是什么呢?
- Java重要知识点(继承、多态、接口,异常,工具,测试)
- 黑马程序员——Java面向对象(二)之封装、继承、多态、接口等