栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【学习笔记】多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习笔记】多态

多态:不同的对象在执行同一动作时,表现出来的不同行为;

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
品种:柯基
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号