【无标题】

一、多态:多种形态

 1.表现:

  (1)同一个对象被造型为不同的类型时,有不同的功能–所有对象都是多态的(明下午详细总结)

对象的多态:水、我、你…

  (2)同一类型的引用在指向不同的对象时,有不同的实现—所有抽象方法是多态的

行为的多态:cut()、getImage()、getScore()…

 2.向上造型/自动类型转换:

  (1)超类型的引用指向派生类的对象

  (2)能点出来什么,看引用的类型

  (3)能造型成为的数据类型有:超类+所实现的接口

 3.向下转换/强制类型转换,成功的条件只有如下两种:

  (1)引用所指向的对象,就是该类型

  (2)引用所指向的对象,实现了该接口或继承了该类型

 4.强转时若不符合如上两种条件,则发生ClassCastException类型转换异常

  建议:在强转之前先通过instanceof判断引用指向的对象是否是该类型

1.instanceof为true的条件就是强转成功的条件
2.何时需要强转:若想访问的变量/方法在超类中没有,则需要强转
instanceof:
1.instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
2.类的实例包含本身的实例,以及所有直接或间接子类的实例instanceof左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误

public class MultiTypeDemo {
    public static void main(String[] args) {
        //条件1.引用所指向的对象,就是该类型
        //条件2.引用所指向的对象,实现了该接口或继承了该类型
        Aoo o = new Boo(); //向上造型
        Boo o1 = (Boo)o;     //引用o所指向的对象,就是Boo类型-------符合条件1
        Inter o2 = (Inter)o; //引用o所指向的对象,实现了Inter接口---符合条件2
        //Coo o3 = (Coo)o; //运行时发生ClassCastException类型转换异常
        if(o instanceof Coo){ //false
            Coo o4 = (Coo)o;
        }else{
            System.out.println("o不是Coo类型");
        }

        System.out.println(o instanceof Boo);   //true
        System.out.println(o instanceof Inter); //true
        System.out.println(o instanceof Coo);   //false
    }
}
-------------------------------------------------------------
interface Inter{ //大
}
class Aoo{ //大
}
class Boo extends Aoo implements Inter{ //小
}
class Coo extends Aoo{ //小
}

补充:

 1.体会接口的好处:

//假设被撞潜艇为ObserveSubmarine----调用的是ObserveSubmarine的getScore()----10
//假设被撞潜艇为TorpedoSubmarine----调用的是TorpedoSubmarine的getScore()----40
//假设被撞潜艇为NuclearSubmarine----调用的是NuclearSubmarine的getScore()----100
if(s instanceof EnemyScore){ //-------可以适用于所有实现EnemyScore接口的类
    EnemyScore es = (EnemyScore)s;
    score += es.getScore();
}
//假设被撞潜艇为MineSubmarine-------调用的是MineSubmarine的getLife()--------1
//假设被撞潜艇为NuclearSubmarine----调用的是NuclearSubmarine的getLife()-----3
if(s instanceof EnemyLife){ //---------可以适用于所有实现EnemyLife接口的类
    EnemyLife el = (EnemyLife)s;
    int num = el.getLife();
    ship.addLife(num);
}

 1.明日单词:

1)subtract:减
2)gameover:结束
3)running:运行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java筑基期修士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值