多态(upcast)减少分支判断 以及 多态继承设计、具体类型判断。

Influenced by 《java 八荣八耻》,翻了下《java编程思想》

印象中多态产生的条件:1.子类继承父类 2.父类【指针】指向子类 3.父类引用调用重写(@Override)方法

  * 大家注意指针的这个字眼,如果方法是静态的话没有指针,多态是没法运作的,本质上多态产生条件就是一个【upcast】。

【回顾重载和重写】

1.@Override 子类对父类允许访问的方法  重写 。(异常:不能抛出比父类更多异常、访问修饰:不能更封闭)

  * 加了注解IDE会帮忙检查 方法名 + 参数列表 + 返回值是否一致。

  * 常见实现接口,接口本身是一种规范,我们要按规范去实现方法,【面向接口编程达到松耦合目的(spring的ioc控制反转依赖注入做到了)】

    正如接口是规范,返回值 + 方法名 + 参数列表  就要和规范一样了。

2.Overload 一个方法名字表达清晰,重载它!方法名一样,参数列表不同(甚至到子类去重载也可以)

 

【正题】

那多态怎么又和if else产生联系了呢?   待我实践后再来编辑~~~

 

【多态继承设计】组合 => 继承(继承需要在编译时知道类型)

【组合状态模式】状态改变 => 行为改变。

class Actor {
    public void act() {}
}

class HappyActor extends Actor {

    public void act() {
        System.out.println("HappyActor");
    }

}

class SadActor extends Actor {

    public void act() {
        System.out.println("SadActor");
    }

}

class Stage {

    private Actor actor = new HappyActor();

    public void performPlay() {
        actor.act();
    }

    public void change() {
        boolean isHappyActor  = actor instanceof HappyActor;
        actor = isHappyActor?new SadActor():new HappyActor();
    }

}

public class Test {
    public static void main(String[] args) {
        Stage stage = new Stage();
        for (int i = 0; i < 10; i++) {
            stage.performPlay();
            stage.change();
        }
    }
}

 

【By the way】

【判断对象具体类型】

【instanceof运算符号】

Object obj = new Object();
Object obj = new Foo();
boolean b = obj instanceof Foo;//true

【库方法】

public static boolean areTypesCompatible(Object expected, Object obj) {
  return Objects.requireNonNull(expected) .getClass() .isInstance(obj);
}

转载于:https://www.cnblogs.com/chenhui7373/p/8641008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值