java 多重继承

生活中有没有这样一种例子,有一样东西既是一种东西,又可以是另一种东西,比如平板电脑,它既可以实现手机的功能,又可以实现电脑的功能,这正好就体现了多重继承了。
先来声明一个手机的抽象类

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();
	}
}

这样的话,就能实现多重继承了,实际上我们也是在操控内部类。

posted @ 2016-10-16 17:54  浩大王  阅读(2909)  评论(0编辑  收藏  举报