关于Java多态

什么是多态

同一个实现接口,使用不同的实例而执行不同的操作

子类转换成父类的规则:

*将一个父类的引用指向一个子类对象时,称为上转型,自动进行类型转换

*此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法

*此时通过父类引用变量无法调用子类特有的方法

/**
 * 宠物类,狗狗和企鹅的父类
 */
package cn.yy.test01;

public abstract class Pet {
    private String name;
    private int health;
    private int love;
    
    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;
    }
    public int getLove() {
        return love;
    }
    public void setLove(int love) {
        this.love = love;
    }
    
    public abstract void eat();
}
package cn.yy.test01;
/**
 * 
 * 狗狗类
 * @author CKW
 *
 */
public class Dog extends Pet {
    private String strain;//品种
    
    
    public String getStrain() {
        return strain;
    }


    public void setStrain(String strain) {
        this.strain = strain;
    }


    public Dog(String name,String strain) {
        super();
        this.strain = strain;
    }
    public Dog() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * 实现狗狗吃饭方法
     * 
     */
    @Override
    public void eat() {

    }

}
package cn.yy.test01;
/**
 * 企鹅类
 * @author CKW
 *
 */
public class Penguin extends Pet {
    private String sex;//性别
    
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    /**
     * 实现企鹅吃饭方法
     */
    @Override
    public void eat() {
        // TODO Auto-generated method stub

    }

}
package cn.yy.test01;
/**
 * 主人类
 * @author CKW
 *
 */
public class Master {
    private String name="";//主人名字
    private int money=0;//元宝数
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public Master (String name,int money){
        this.name=name;
        this.money=money;
    }
    
    /**
     * 主人给宠物喂食
     */
    public void feed(Pet pet){
        pet.eat();
    }
    
    //主人给Dog喂食
    public void feed(Dog dog){
        dog.eat();
    }
    
    //主人给Penguin喂食
    public void feed(Penguin pgn){
        pgn.eat();
    }
            
}
package cn.yy.test01;


public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Dog dog=new Dog("偶偶","雪瑞纳");
        //Penguin penguin=new Penguin();
        Master master=new Master("王先生", 100);
        master.feed( dog);//主人给狗狗喂食
        
    }

}
原文地址:https://www.cnblogs.com/ckwblogs/p/5964919.html