public class PolyArray01 {//多态数组
//数组的定义类型为父类类型
//里面保存的实际元素类型为子类类型
public static void main(String[] args) {
//声明存放Person类型的静态数组
Person[] person =new Person[6];
//在数组中存放子类类型的元素
person[0]=new Student("小米",35,66);
person[1]=new Student("小刚",19,88);
person[2]=new Student("小智",61,99);
person[3]=new Teacher("大强",35,25000);
person[4]=new Teacher("张浪",65,35500);
person[5]=new Teacher("智多",55,66666);
//遍历数组 输出元素
for (int i=0;i<person.length;i++){
System.out.println(person[i].show());//其中person[i].show() 应用到了动态绑定机制
}
}
}
//父类 Person类
class Person{
private String name;
private int age;
//无参构造器
public Person(){
}
//有参构造器
public Person(String name,int age){
this.name =name;
this.age =age;
}
//定义一个show()方法返回个人信息
public String show(){
return getName()+"\t年龄为:"+getAge();
}
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;
}
}
//子类 学生类 Student
class Student extends Person{//继承父类Person
private double sorce;
//有参构造器
public Student(String name,int age,double sorce){
super(name,age);
this.sorce=sorce;
}
public double getSorce() {
return sorce;
}
public void setSorce(double sorce) {
this.sorce = sorce;
}
//重写父类方法show()
public String show(){
return super.show()+"\t"+"该学生成绩为:"+this.sorce;
}
}
//子类 老师类 Teacher类
class Teacher extends Person{//Teacher继承父类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;
}
//重写父类方法show()
public String show(){
return super.show()+"\t"+"该老师的薪水为“"+this.salary;
}
}
结果如下:
优化代码后
在学生类中添加了特有方法study
在老师类中添加了特有方法teach
public class PolyArray01 {//多态数组
//数组的定义类型为父类类型
//里面保存的实际元素类型为子类类型
public static void main(String[] args) {
//声明存放Person类型的静态数组
Person[] person =new Person[6];
//在数组中存放子类类型的元素
person[0]=new Student("小米",35,66);
person[1]=new Student("小刚",19,88);
person[2]=new Student("小智",61,99);
person[3]=new Teacher("大强",35,25000);
person[4]=new Teacher("张浪",65,35500);
person[5]=new Teacher("智多",55,66666);
//遍历数组 输出元素
for (int i=0;i<person.length;i++){
System.out.println(person[i].show());//其中person[i].show() 应用到了动态绑定机制
//利用instanceof 判断person[i] 的运行类型是否为Teacher 或Student
if(person[i] instanceof Teacher){
Teacher teacher = (Teacher) person[i];
teacher.teach();
}else if(person[i] instanceof Student){
Student student =(Student)person[i];
student.study();
}
}
}
}
//父类 Person类
class Person{
private String name;
private int age;
//无参构造器
public Person(){
}
//有参构造器
public Person(String name,int age){
this.name =name;
this.age =age;
}
//定义一个show()方法返回个人信息
public String show(){
return getName()+"\t年龄为:"+getAge();
}
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;
}
}
//子类 学生类 Student
class Student extends Person{//继承父类Person
private double sorce;
//有参构造器
public Student(String name,int age,double sorce){
super(name,age);
this.sorce=sorce;
}
public double getSorce() {
return sorce;
}
public void setSorce(double sorce) {
this.sorce = sorce;
}
//重写父类方法show()
public String show(){
return super.show()+"\t"+"该学生成绩为:"+this.sorce;
}
//Student 特有方法
public void study(){
System.out.println("学生"+getName()+"正在学习");
}
}
//子类 老师类 Teacher类
class Teacher extends Person{//Teacher继承父类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;
}
//重写父类方法show()
public String show(){
return super.show()+"\t"+"该老师的薪水为“"+this.salary;
}
//Teacher 特有方法
public void teach(){
System.out.println("老师"+getName()+"正在教学");
}
}
结果如下