Java面对对象特性之----多态

一、什么是多态

面对对象编程三大特性:封装继承多态
多态 是指不同类的对象对同一消息作出不同的响应

二、多态的作用

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性

三、多态存在的三个条件

  1. 有继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

注: 第二点中父类的三种类型方法不能表现为多态:

  • 1、static修饰的方法,因为被static修饰的方法是属于类的,而不是属于实例的
  • 2、final修饰的方法,因为被final修饰的方法无法被子类重写
  • 3、private和protected修饰的方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是无法被外部所引用

四、实例解析

模拟一个简单的场景:水有三种状态(固态、液态、气态),三种状态都有自己各自的方法,现模拟水的不同状态来杀死小强

①: 创建一个 H2O 接口

public interface H2O {
    public void kill();   //有一个杀死小强的方法
}

②: 创建水三种状态的实现类,分别继承 H2O 接口

(1)液态 Liquid

public class Liquid implements H2O{
    @Override
    public void kill() {
        System.out.println("淹死");
    }
    
    public void wash(){     //液态水可以洗衣服
        System.out.println("可以洗衣服");
    }
}

(2)固态 Solid

public class Solid implements H2O{
    @Override
    public void kill() {
        System.out.println("压死");
    }
    public void downTemp(){      //冰可以降温
        System.out.println("可以用来降温");
    }
}

(3)气态 Gaseity

public class Gaseity implements H2O{
    @Override
    public void kill() {
        System.out.println("烫死");
    }
    public void heat(){         //水蒸气可以加热食品
        System.out.println("加热食品");
    }
}

③: 创建一个People类,使用水的各种方法

public class People {
    private H2O tool;
    private String target;
    public Pepple(H2o tool,String target){
        this.tool = tool;
        this.target = target;
    }

    public void execute(){     //调用父类共有的方法kill
        tool.kill();      
        System.out.println("目标:"+target);
    }
    
    public void use(){      //父类引用指向子类对象
        if (tool instanceof Liquid){   
            ((Water)tool).wash();
        }else if (tool instanceof Solid){
            ((Ice) tool).downTemp();
        }else{
            ((Steam)tool).heat();
        }
    }
}

④: 创建一个测试类 H2OTest

public class H2OTest {

   public static H2O getH2OByTemp(int temp){   //通过温度判断水的状态,从而生成相应的实体类
        H2O h2O = null;
        if(temp <= 0){
            h2O = new Solid();
        }else if(temp < 100){
            h2O = new Liquid();
        }else{
            h2O = new Gaseity();
        }
        return h2O;
    }
    
    //测试
    public static void main(String[] args) {
        H2O tool= getH2OByTemp(200);
        People people = new People(tool,"小强");
        people.execute();
        people.use();
    }
}
/*  控制台打印:
烫死
目标:小强
加热食品
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值