引言:
相比于c++中的抽象类(纯虚函数),java对于抽象的概念更加的具有魔力,abstract力图将接口与实现分离,这一点,interface做得更好。虽然java没有c++那样的多重继承,但是通过接口,也实现了这一功能。给出例子,了解接口的核心。
接口的核心(导出类可以向上转型为接口)
interface CanFight{
void fight();
}
interface Swim{
void swim();
}
interface CanFly{
void fly();
}
class Actor{
public void fight() {}
}
class Star extends Actor
implements CanFight,Swim,CanFly{
public void swim() {}
public void fly() {}
}
public class Adventure {
public static void t(CanFight x) {x.fight();}
public static void u(Swim x) {x.swim();}
public static void v(CanFly x) {x.fly();}
public static void w(Actor x) {x.fight();}
public static void mian(String []args) {
Star s = new Star();
t(s);
u(s);//可以向上转型
v(s);
w(s);
}
}
通过继承来扩展接口
例子如下:
interface Monster{
void menace();
}
interface BadMonster extends Monster{
void destroy();
}
interface Lethal{
void kill();
}
class SuperMonster implements BadMonster{
public void menace() {}
public void destroy() {}
}
interface BigBoss extends BadMonster,Lethal{
void DrinkBlood();
}
class BadBigBoss implements BigBoss{
public void menace() {}
public void destroy() {}
public void kill() {}
public void DrinkBlood() {}
}
public class HorrorShow {
static void u(Monster b) {b.menace();}
static void v(BadMonster d) {d.destroy();d.menace();}
static void w(Lethal c) {c.kill();}
public static void mian(String []args) {
BadMonster jack = new SuperMonster();
u(jack);
v(jack);
BigBoss lucy = new BadBigBoss();
u(lucy);
v(lucy);
w(lucy);
}
}
在进行组合的时候尽量避免名字冲突,不然会造成代码混乱。
后记:
这些东西在实践中才会认识的更加深刻,接下来就是上一篇提到的内部类了。(关注一下哦,嘻嘻)