4.48 多态练习

1: 猫狗案例

/*
	多态练习:猫狗案例
*/
class Animal {
	public void eat() {
		System.out.println("吃饭");
	}
}

class Dog extends Animal {
	public void eat() {
		System.out.println("狗吃肉");
	}

	public void lookDoor() {
		System.out.println("狗看门");
	}
}

class Cat extends Animal {
	public void eat() {
		System.out.println("猫吃鱼");
	}

	public void playGame() {
		System.out.println("猫捉迷藏");
	}
}

class DuoTaiTest {
	public static void main(String[] args) {
		// 定义为狗
		Animal a = new Dog();
		a.eat();
		System.out.println("--------------");
		// 还原成狗
		Dog d = (Dog) a;
		d.eat();
		d.lookDoor();
		System.out.println("--------------");
		// 变成猫
		a = new Cat();
		a.eat();
		System.out.println("--------------");
		// 还原成猫
		Cat c = (Cat) a;
		c.eat();
		c.playGame();
		System.out.println("--------------");

		// 演示错误的内容
		// Dog dd = new Animal();
		// Dog ddd = new Cat();
		// ClassCastException
		// Dog dd = (Dog)a;
	}
}

2:南北方人

/*
	不同地方饮食文化不同的案例
*/
class Person {
	public void eat() {
		System.out.println("吃饭");
	}
}

class SouthPerson extends Person {
	public void eat() {
		System.out.println("炒菜,吃米饭");
	}

	public void jingShang() {
		System.out.println("经商");
	}
}

class NorthPerson extends Person {
	public void eat() {
		System.out.println("炖菜,吃馒头");
	}

	public void yanJiu() {
		System.out.println("研究");
	}
}

class DuoTaiTest2 {
	public static void main(String[] args) {
		// 测试
		// 南方人
		Person p = new SouthPerson();
		p.eat();
		System.out.println("-------------");
		SouthPerson sp = (SouthPerson) p;
		sp.eat();
		sp.jingShang();
		System.out.println("-------------");

		// 北方人
		p = new NorthPerson();
		p.eat();
		System.out.println("-------------");
		NorthPerson np = (NorthPerson) p;
		np.eat();
		np.yanJiu();
	}
}

3:

/*
	看程序写结果:先判断有没有问题,如果没有,写出结果
*/
class Fu {
	public void show() {
		System.out.println("fu show");
	}
}

class Zi extends Fu {
	public void show() {
		System.out.println("zi show");
	}

	public void method() {
		System.out.println("zi method");
	}
}

class DuoTaiTest3 {
	public static void main(String[] args) {
		Fu f = new Zi();
		// 找不到符号
		// f.method();
		f.show();
	}
}

4:

/*
看程序写结果:先判断有没有问题,如果没有,写出结果

多态的成员访问特点:
	方法:编译看左边,运行看右边。
	
继承的时候:
	子类中有和父类中一样的方法,叫重写。
	子类中没有父亲中出现过的方法,方法就被继承过来了。
*/
class A {
	public void show() {
		show2();
	}

	public void show2() {
		System.out.println("我");
	}
}

class B extends A {
	/*
	public void show() {
		show2();
	}
	*/

	public void show2() {
		System.out.println("爱");
	}
}

class C extends B {
	public void show() {
		super.show();
	}

	public void show2() {
		System.out.println("你");
	}
}

public class DuoTaiTest4 {
	public static void main(String[] args) {
		A a = new B();
		a.show();

		B b = new C();
		b.show();
	}
}


你可能感兴趣的:(4.48 多态练习)