多态

作者: 月寒兮夜凉 | 来源:发表于2017-12-07 17:42 被阅读15次
    优秀文章

    菜鸟教程 > Java 多态


    说明
    • 多态的前提必须满足继承和重写;

    重写

    普通手机类:

    public class Phone{
        
        private String displayer; // 显示器
        private String battery; // 电池
        
        // 手机充电 
        public void charge(){
            battery = "100%";
            System.out.println("当前电量:"+battery);
        }
        
    }
    

    坏手机类:

    // 继承手机类并重写手机的充电方法
    public class BadPhone extends Phone {
    
        // 坏手机充电
        public void charge(){
            System.out.println("充电失败!");
        }
        
    }
    

    现在不同的手机对于同一个充电操作已经有了不同的体现,已经满足多态的前提;


    实例

    充电器类:

    public class Charger {
        
        // 接收所有手机类,并对传入手机执行充电操作
        public void charge(Phone phone){
            phone.charge();
        }
        
    }
    

    使用充电器给不同手机充电:

    public static void main(String[] args) {
        Charger charger = new Charger();
        charger.charge(new Phone()); //给普通手机充电
        charger.charge(new BadPhone()); // 给坏手机充电
    }
    

    执行结果:

    当前电量:100%
    充电失败!


    拓展

    如何使坏手机恢复正常充电功能?


    策略模式

    在之前的设计中,手机的充电是否正常在编码阶段就已经决定,既然要动态的修改方法内部的实现,那么类的本身就不能具备固定的充电实现:
    首先抽象充电方法:

    public interface ICharge {
        
        // 抽象充电方法
        public void charge();
        
    }
    

    正常充电:

    public class NormalCharge implements ICharge {
    
        @Override
        public void charge() {
            System.out.println("充电成功!");
        }
    
    }
    

    异常充电:

    public class AbnormalCharge implements ICharge {
    
        @Override
        public void charge() {
            System.out.println("充电失败!");
        }
    
    }
    

    修改普通手机类:

    public class Phone{
        
        private String displayer; // 显示器
        private String battery; // 电池
        private ICharge charge; // 定义充电属性
        
        // 调用充电属性所带来的充电方法
        public void charge(){
            charge.charge();
        }
        
        public ICharge getCharge() {
            return charge;
        }
        
        public void setCharge(ICharge charge) {
            this.charge = charge;
        }
    }
    

    使用充电器给不同手机充电:

    public static void main(String[] args) {
        Charger charger = new Charger();
            
        // 实例化手机
        Phone phone = new Phone();
        // 设置正常充电操作
        phone.setCharge(new NormalCharge());
        
        // 实例化手机
        Phone badPhone = new Phone();
        // 设置异常充电操作
        badPhone.setCharge(new AbnormalCharge());
            
        charger.charge(phone); //给正常手机充电
        charger.charge(badPhone); // 给坏手机充电
    }
    

    执行结果:

    充电成功!
    充电失败!

    相关文章

      网友评论

          本文标题:多态

          本文链接:https://www.haomeiwen.com/subject/pxodixtx.html