多态:不同的对象在执行同一动作时,表现出来的不同行为;
1、对象数组:不是基本类型数组,元素不再是单个数据,而是对象;对象有多个属性,存储内容丰富;做项目时对象数组用得较多;
1、对象的向上转型:定义父类对象 ,new子类的构造方法
Pet p1=new Dog("viky",95,"二哈");
2、对象的向下转型:可以将父类对象转成子类对象,可以调用子类中单独定义的方法
如:((Dog)pets[i]).run();
3、instance of :判断对象是否属于具体的类类型
如:
public class Test {
public static void main(String[] args) {
Pet p1=new Dog("viky",95,"二哈");
Pet p2=new Penguin("QQ",85,"Q仔");
Pet p3=new Dog("tom",92,"柯基");
Pet[] pets=new Pet[3];
pets[0]=p1;
pets[1]=p2;
pets[2]=p3;
for(int i=0;i
if(pets[i] instanceof Dog) {
((Dog)pets[i]).run();
}
if(pets[i] instanceof Penguin) {
((Penguin)pets[i]).swim();
}
pets[i].print();
}
}
}
class Pet{
private String name;
private int health;
public Pet(String name,int health) {
this.name=name;
this.health=health;
}
public void print() {
System.out.println("名字:"+getName()+"n健康值:"+getHealth());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health=health;
}
}
class Dog extends Pet{
private String strain;
public Dog(String name,int health,String strain) {
super(name,health);
this.strain=strain;
}
public void print() {
super.print();
System.out.println("品种:"+getStrain());
}
public void run() {
this.setHealth(this.getHealth()+1);
System.out.println("狗狗在奔跑");
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain=strain;
}
}
class Penguin extends Pet{
private String sex;
public Penguin(String name,int health,String sex) {
super(name,health);
this.sex=sex;
}
public void print() {
super.print();
System.out.println("性别:"+getSex());
}
public void swim() {
this.setHealth(this.getHealth()+3);
System.out.println("企鹅在游泳");
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex=sex;
}
}
输出结果:
狗狗在奔跑
名字:viky
健康值:96
品种:二哈
企鹅在游泳
名字:QQ
健康值:88
性别:Q仔
狗狗在奔跑
名字:tom
健康值:93
品种:柯基
4、多态的三个要素:
(1)在满足继承关系的时候
(2)要完成方法重写
(3)要完成对象的向上转型
5、多态的表现形式:
把父类对象作为一个方法的参数.
如:
//Test.java文件
public class Test {
public static void main(String[] args) {
Pet[] pets=new Pet[3];
pets[0]=new Dog("viky",95,"二哈");
pets[1]=new Penguin("QQ",85,"Q仔");
pets[2]=new Dog("tom",92,"柯基");
Master master=new Master();
for(int i=0;i
master.cure(pets[i]);
pets[i].print();
}
}
}
//Pet.java文件
public class Pet {
private String name;
private int health;
public Pet(String name,int health) {
this.name=name;
this.health=health;
}
public void toHospital() {
}
public void print() {
System.out.println("名字:"+getName()+"n健康值:"+getHealth());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health=health;
}
}
//Dog.java文件
public class Dog extends Pet{
private String strain;
public Dog(String name,int health,String strain) {
super(name,health);
this.strain=strain;
}
public void toHospital() {
this.setHealth(this.getHealth()-4);
System.out.println("吃药、打针");
}
public void print() {
super.print();
System.out.println("品种:"+getStrain());
}
public String getStrain() {
return strain;
}
public void setStrain(String strain) {
this.strain=strain;
}
}
//Penguin.java文件
public class Penguin extends Pet{
private String sex;
public Penguin(String name,int health,String sex) {
super(name,health);
this.sex=sex;
}
public void toHospital() {
this.setHealth(this.getHealth()-6);
System.out.println("吃药、疗养");
}
public void print() {
super.print();
System.out.println("性别:"+getSex());
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex=sex;
}
}
//Master.java文件
public class Master {
public void cure(Pet pet) {
pet.toHospital();
}
}
//输出结果:
吃药、打针
名字:viky
健康值:91
品种:二哈
吃药、疗养
名字:QQ
健康值:79
性别:Q仔
吃药、打针
名字:tom
健康值:88
品种:柯基



