多态数组
数组的定义类型为父类类型,里面保存的实际元素类型为子类类型
应用实例:现有一个继承结构如下:
要求创建1个Person对象、2个Student对象和2个Teacher对象。
package day03;
public class Demo1 {
public static void main(String[] args) {
Person[] persons = new Person[5];
persons[0] = new Person("Tom1", 18);
persons[1] = new Student("Tom2", 19, 89.0);
persons[2] = new Student("Tom3", 20, 99.0);
persons[3] = new Teacher("Tom4", 21, 10000.0);
persons[4] = new Teacher("Tom5", 22, 15000.0);
for (int i = 0; i < persons.length; i++) {
System.out.println(persons[i]);
}
}
}
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;
}
@Override
public String toString() {
return "name='" + name + ", age=" + age;
}
}
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;
}
@Override
public String toString() {
return "学生 " + super.toString() + ", score = " + score;
}
}
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;
}
@Override
public String toString() {
return "老师 " + super.toString() + ", salary = " + salary;
}
}
// 给 Student 类和 Teacher 类分别添加 study() 方法和 teach() 方法
// 此时如果要输出 study 和 teach 方法,就通过 instanceof 方法进行判断,然后向下转型来调用子类独有的方法。
package day03;
public class Demo1 {
public static void main(String[] args) {
Person[] persons = new Person[5];
persons[0] = new Person("Tom1", 18);
persons[1] = new Student("Tom2", 19, 89.0);
persons[2] = new Student("Tom3", 20, 99.0);
persons[3] = new Teacher("Tom4", 21, 10000.0);
persons[4] = new Teacher("Tom5", 22, 15000.0);
for (int i = 0; i < persons.length; i++) {
System.out.println(persons[i]);
if(persons[i] instanceof Student){
((Student)persons[i]).study();
}else if(persons[i] instanceof Teacher){
((Teacher)persons[i]).teach();
}else if(persons[i] instanceof Person){
}else {
System.out.println("类型有误!");
}
}
}
}
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;
}
@Override
public String toString() {
return "name='" + name + ", age=" + age;
}
}
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;
}
@Override
public String toString() {
return "学生 " + super.toString() + ", score = " + score;
}
public void study(){
System.out.println("学生 " + getName() + " 正在学习Java课程");
}
}
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;
}
@Override
public String toString() {
return "老师 " + super.toString() + ", salary = " + salary;
}
public void teach(){
System.out.println("老师 " + getName() + " 正在讲授Java课程");
}
}