目录
父类:人类
package com.ploy_.polyarr_;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String say(){//返回名字和年龄
return "name="+name+"\tage="+age;
}
}
子类:学生类
package com.ploy_.polyarr_;
public class Student extends Person{
private double score;
public Student(String name, int age, double score) {
super(name, age);
this.score = score;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//重写父类say方法
public String say(){
return "学生\t" +super.say()+"\tscore="+score;
}
public void study(){
System.out.println("学生 "+getName()+" 正在学习");
}
}
子类:老师类
package com.ploy_.polyarr_;
public class Teacher extends Person{
private double salary;
public Teacher(String name, int age, double salary) {
super(name, age);
this.salary = salary;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String say(){
return"老师\t"+ super.say()+"\tsalary="+salary;
}
public void teach(){
System.out.println("老师 "+getName()+"正在授课");
}
}
主类
package com.ploy_.polyarr_;
public class PolyArray {
public static void main(String[] args) {
//应用实例:现有一个继承结构如下:要求创建1个Person对象、
//2个Student对象和2个Teacher对象,统一放在数组中,并调用每一个对象的say方法
Person[] persons=new Person[5];
persons[0]=new Person("jack",20);
persons[1]=new Student("jack",18,100);
persons[2]=new Student("smith",19,30.1);
persons[3]=new Teacher("scott",30,20000);
persons[4] = new Teacher("king",50,25000);
//循环遍历多态数组,调用say
for (int i = 0; i < persons.length; i++) {
//persons[i]编译类型是Person,运行类型是根据实际情况有JVM来判断
System.out.println(persons[i].say()); //动态绑定机制
if(persons[i] instanceof Student){
Student s=(Student) persons[i];
s.study();
}
if(persons[i] instanceof Teacher){
Teacher t = (Teacher) persons[i];
t.teach();
}
}
}
}