生活中有沒有這樣一種例子,有一樣東西既是一種東西,又可以是另一種東西,比如平板電腦,它既可以實現手機的功能,又可以實現電腦的功能,這正好就體現了多重繼承了。
先來聲明一個手機的抽象類
abstract class Phone{
abstract void call();
abstract void watchMovie();
abstract void playGames();
}
然后我們再來聲明一個電腦的抽象類
abstract class PC{
abstract void writeProgram();
abstract void playGames();
abstract void chatWithFriend();
}
電腦上可以玩游戲,寫軟件,和朋友聊天什么的
那么我們再來創建一個平板電腦的類,那平板電腦可以通過一種什么樣的方式來實現同時繼承這兩個類的方法呢?
我們可以通過內部類來實現它
class OuterPanelComputer extends Phone{
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("call");
}
@Override
public void watchMovie() {
// TODO Auto-generated method stub
System.out.println("watchMovie");
}
@Override
public void playGames() {
// TODO Auto-generated method stub
System.out.println("playGames");
}
class PanelComputer extends PC{
@Override
public void writeProgram() {
// TODO Auto-generated method stub
System.out.println("writeProgram");
}
@Override
public void playGames() {
// TODO Auto-generated method stub
System.out.println("playGames");
}
@Override
public void chatWithFriend() {
// TODO Auto-generated method stub
System.out.println("chatWithFriend");
}
public void call() {
// TODO Auto-generated method stub
OuterPanelComputer.this.call();
}
public void watchMovie() {
// TODO Auto-generated method stub
OuterPanelComputer.this.watchMovie();
}
}
}
注意這里內部類在復寫的call和watchmovie方法里調用了外部類的call 和watchmovie
由於內部類是可以訪問到外部類的所有的方法的,所以,這里我們創建一個內部類的對象的話,實際上也可以看作是在創建一個繼承兩個類的類,也就是偽多重繼承。
public static void main(String[] args) {
// TODO Auto-generated method stub
OuterPanelComputer outerpanelcomputer = new OuterPanelComputer();
OuterPanelComputer.PanelComputer panelcomputer = outerpanelcomputer.new PanelComputer();
panelcomputer.chatWithFriend();
panelcomputer.playGames();
panelcomputer.watchMovie();
panelcomputer.call();
panelcomputer.writeProgram();
}
}
這樣的話,就能實現多重繼承了,實際上我們也是在操控內部類。
