作者godfat (godfat 真常)
看板java
标题Re: [问题] 想请问interface的具体意义
时间Mon Jan 22 18:51:04 2007
※ 引述《jaw109 (泼文章都是为了养小鸡)》之铭言:
: [问题]
: 1. 正如JAVA所规范的,interface是一个"has-a"的关系;如果我使用
: 机车的电动雨刷的话,会出现error吗? 又或者只是 do nothing而已?
no, 你想得太复杂了,Java interface 就只是一个 pure abstract class 而已
写成 C++ 的话就是这样:
class 电动雨刷{ // 其实我是 interface...
public:
virtaul void 刷刷刷() = 0;
};
class 汽车: public 交通工具, public 电动雨刷{
// 没错,就是多重继承,只是电动雨刷没有任何实作
public:
void 开车();
void 刷刷刷(){ /*一定要实作,否则不能产生汽车实体*/ }
};
class 机车: public 交通工具{
// 不继承电动雨刷
void 开车();
};
所以 Java Interface 其实是功能变弱的多重继承
上面写成 Java 的话就是这样:
interface 电动雨刷{
public void 刷刷刷(); // 不需要实作,写了会 error
// 忘了要不要加 public..... XD 懒得查证了
}
class 汽车 extends 交通工具 implements 电动雨刷{
public void 开车(){ /*...*/ }
public void 刷刷刷(){ /*一定要实作,不实作 compile error*/ }
}
class 机车 extends 交通工具{ // 没有实作电动雨刷
public void 开车(){ /*...*/ }
}
然後两者都可以这样做:
C++:
电动雨刷* abc = new 汽车; // 无参数时括号可省略
Java:
电动雨刷 abc = new 汽车(); // 括号一定要加
--
Nobody can take anything away from him.
Nor can anyone give anything to him.
What came from the sea,
has returned to the sea.
Chrono Cross
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18