尚硅谷JavaSE基础
6.8.4多态的应用场景
1. 多态数组
当创建多个不同的子类对象, 而又想统一处理这批对象时, 就可以使用多态数组.
Person[] arr = {new Student(), new Teacher()};
public class Person { private String name; private int age; private String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public void setGender(String gender) { this.gender = gender; } public String getGender() { return gender; } public String say() { return "姓名:" + name + ",年龄:" + age + ",性别:" + gender; } public void sayHello() { System.out.println("打个招呼"); } } |
public class Chinese extends Person { private String shuxiang; public Chinese(String name, int age, String gender, String shuxiang) { super(name, age, gender); this.shuxiang = shuxiang; } public void setShuxiang(String shuxiang) { this.shuxiang = shuxiang; } public String getShuxiang() { return shuxiang; } public void spring() { System.out.println("过大年"); } @Override public String say() { return super.say() + ",属相:" + shuxiang; } @Override public void sayHello() { System.out.println("吃了吗?"); } } |
public class American extends Person { private boolean hasGun; public American() {} public American(String name, int age, String gender, boolean hasGun) { super(name, age, gender); this.hasGun = hasGun; } public void setHasGun(boolean hasGun) { this.hasGun = hasGun; } public boolean isHasGun() { return hasGun; } public void christmas() { System.out.println("Merry Christmas!!"); } @Override public void sayHello() { System.out.println("How are you?"); } } |
public class PersonTest { public static void main(String[] args) { Person[] ps = new Person[5]; // 多态数组, 可以保存任意类型的子类对象 ps[0] = new Chinese("张三", 30, "男", "牛"); ps[1] = new American("Jack", 25, "male", true); ps[2] = new Person("某人", 15, "未知"); ps[3] = new American("Rose", 32, "female", false); ps[4] = new Chinese("李四", 40, "女", "羊"); for (Person p : ps) { System.out.println(p.say()); } System.out.println("-------------------------"); // 因为在同一个数组中, 并且所有对象都有age属性, 所以就可以对所有元素进行冒泡排序 for (int i = 0; i < ps.length - 1; i++) { for (int j = 0; j < ps.length - 1 - i; j++) { if (ps[j].getAge() > ps[j + 1].getAge()) { Person tmp = ps[j]; ps[j] = ps[j + 1]; ps[j + 1] = tmp; } } } for (Person p : ps) { System.out.println(p.say()); } } } |