Java多态应用——多态数组

多态数组

案例:现在定义一个Person类,该类里面有private的name、age属性,和say方法。定义一个Student类,该类有private的score属性,定义一个Teacher类,里面有private的salary属性。

并且Student和Teacher是Person的子类,存在继承关系。

1.创建一个Person的对象,两个Student的对象,两个Teacher的对象,统一放在数组当中,并调用say方法。

Person类

public class Person {
	private String name;
	private int age;
	
	public Person(String name, int age) {
		this.name  = name;
		this.age = age;
	}
	
	public String setName(String name) {
		this.name = name;
		return name;
	}
	public String getName() {
		return name;
	}
	public int setAge(int age) {
		this.age = age;
		return age;
	}
	public int getAge() {
		return age;
	}
	
	public String say() {
		return "name="+name+"age="+age;
	}

}

Student类

public class Student extends Person{
	
	private double score;
	
	public Student(String name, int age, double score) {
		super(name,age);
		this.score = score;
	}
	
	public double setScore(double score) {
		this.score = score;
		return score;
	}
	
	public double getScore() {
		return score;
	}
	
	public String say() {
		return super.say()+"score="+score;
	}

}

Teacher类

public class Teacher extends Person{
	
	private double salary;
	
	public Teacher(String name, int age, double salary){
		super(name,age);
		this.salary = salary;
	}
	
	public double setSalary(double salary) {
		this.salary = salary;
		return salary;
	}
	public double getSalary() {
		return salary;
	}
	
	public String say() {
		return super.say()+"salary="+salary;
	}
}

Test类

public class Test {

	public static void main(String[] args) {
		
        //这里题目说放在数组当中,我们知道Person是父类,而Student和Teacher是子类,
        //所以定义一个Person类型的数组来存放数据。
		Person[] person	= new Person[5];
		
		person[0] = new Person("jaek",20);
		person[1] = new Student("tom",18,88);
		person[2] = new Student("xiaoyang",20,80);
		person[3] = new Teacher("wang",28,20000);
		person[4] = new Teacher("zhang",45,25000);
		
		for(int i = 0; i < person.length; i++) {
			//person[i].say();//动态绑定机制
			System.out.println(person[i].say());
		}
		
	}

}

输出结果

name=jaekage=20
name=tomage=18score=88.0
name=xiaoyangage=20score=80.0
name=wangage=28salary=20000.0
name=zhangage=45salary=25000.0

2.如何调用子类的特有的方法,比如在Teacher当中有一个teach方法,在Stuedent有一个study方法,如何调用?

首先在Teacher加入teach方法

public void teach() {
		System.out.println("老师"+getName()+"在讲课...");
	}

在Student加入study方法

public void study() {
		System.out.println("学生"+getName()+"正在上课...");
	}

主函数main

public class Test {

	public static void main(String[] args) {
		
		Person[] person	= new Person[5];
		
		person[0] = new Person("jaek",20);
		person[1] = new Student("tom",18,88);
		person[2] = new Student("xiaoyang",20,80);
		person[3] = new Teacher("wang",28,20000);
		person[4] = new Teacher("zhang",45,25000);
		
		for(int i = 0; i < person.length; i++) {
			//person[i].say();//动态绑定机制
			System.out.println(person[i].say());
			
			//报错,无法调用
			//person[i].teach();
			//person[i].study();
			
			if(person[i] instanceof Student) {
				//向下转型
				Student student = (Student)person[i];
				student.study();
			}else if(person[i] instanceof Teacher) {
				Teacher teacher = (Teacher)person[i];
				teacher.teach();
			}else if(person[i] instanceof Person){
				
			}else {
				System.out.println("您的类型有误,请检查");
			}
		}
		
	}

}

我们在主函数当中加入判断,通过向下转型,使得person指向子类,从而调用子类当中特有的方法。

name=jaekage=20
name=tomage=18score=88.0
学生tom正在上课...
name=xiaoyangage=20score=80.0
学生xiaoyang正在上课...
name=wangage=28salary=20000.0
老师wang在讲课...
name=zhangage=45salary=25000.0
老师zhang在讲课...

如有错误,还望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值