Java中面向对象三大特性之一:多态(Generics)

零、什么是多态?

多态是同一个行为具有多个不同表现形式或形态的能力。也可以理解为,同一个事件作用在不同对象上会产生不同的结果。

一、现实实例

    如图:

二、多态存在的三个前提条件

子类和父类之间要有继承关系。 子类要重写父类方法。 父类的引用要指向子类实例化的对象,对象调用方法时会调用子类实现的方法,而不是父类的实现方法,这就是多态。(比如,Human c=new Chinese();语句在堆内存中开辟的了子类Chinese的对象 ,并把栈内存中的父类Human的引用指向了子类对象)

三、代码演示

package com.znzz.java.test;

public class GenericsDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Chinese c=new Chinese();
		test(c);
		American a=new American();
		test(a);
		System.out.println("=================");
		Human hc=new Chinese();//向上转型
		hc.speak();//对象调用被子类Chinese重写的方法
		hc.read();//对象调用父类本身的方法
		System.out.println("=================");
		Human ha=new American();//向上转型
		ha.speak();
		System.out.println("=================");
		Chinese c1=(Chinese)hc;//向下转型
		c1.speak();
		c1.skin();
		
	}
    //用static修饰方法,使其成为静态方法,类加载之后便可以直接调用此方法,而不需要类的实例
	public static void test(Human human) {
		human.speak();
		human.read();
		System.out.println("-----------");
		//判断左边的对象是不是右边类的实例
		if(human instanceof Chinese) {
			Chinese ch=(Chinese)human;//如果human是子类Chinese的实例,则把该实例强制类型转化为该子类的对象
			ch.speak();
			ch.skin();
			System.out.println("-----------");
		}else if(human instanceof American){
			American am=(American)human;
			am.speak();
			am.skin();
		}
	}

}
//定义抽象类
abstract class Human{
	abstract void speak();//声明抽象方法
	//也可以声明普通的方法,如下
	void read() {
		System.out.println("人类是会阅读的");//普通方法是不用被子类重写的
	}
}
class Chinese extends Human{
	//继承抽象类必须重写抽象类中的方法
	@Override
	void speak() {
		// TODO Auto-generated method stub
		System.out.println("中国人是说汉语的");
	}
	//子类声明自己的方法
	void skin() {
		System.out.println("中国人的肤色整体偏黄");
	}
}
class American extends Human{
	//继承抽象类必须重写抽象类中的方法
	@Override
	void speak() {
		// TODO Auto-generated method stub
		System.out.println("美国人是说英语的");
	}
	void skin() {
		System.out.println("美国人的肤色整体偏白");
	}
}
运行结果如下: 中国人是说汉语的 人类是会阅读的 ----------- 中国人是说汉语的 中国人的肤色整体偏黄 ----------- 美国人是说英语的 人类是会阅读的 ----------- 美国人是说英语的 美国人的肤色整体偏白 ================= 中国人是说汉语的 ================= 美国人是说英语的 ================= 中国人是说汉语的 中国人的肤色整体偏黄

以下是编写时出现的错误,做一下记录:具体原因看报错

经验分享 程序员 微信小程序 职场和发展