文档章节

Java 多态中的强制类型转换

Hellation
 Hellation
发布于 04/27 16:08
字数 471
阅读 6
收藏 1

目前多态情况下不能访问子类特有的成员。

如果需要访问子类特有的成员,那么需要进行类型强制转换.


基本数据类型的转换
    
    小数据类型-------->大的数据类型      自动类型转换

    大数据类型--------->小数据类型       强制类型转换     小数据类型  变量名 = (小数据类型)大数据类型;


引用数据类型的转换
    
    小数据类型--------->大数据类型     自动类型转换。

    大数据类型--------->小数据类型      强制类型转换

类型转换最场景的问题: java.lang.ClassCastException。 强制类型转换失败。

 

*/
//动物类
abstract class Animal{

    String name;

    public Animal(String name){
        this.name = name;
    }

    public abstract void run();
}

//老鼠
class  Mouse extends Animal{

    public Mouse(String name){
        super(name);
    }
    
    public  void run(){
        System.out.println(name+"四条腿慢慢的走!");
    }

    //老鼠特有方法---打洞
    public void dig(){
        System.out.println("老鼠在打洞..");
    }
}

//鱼
class Fish extends Animal{

    public Fish(String name){
        super(name);
    }

    public  void run(){
        System.out.println(name+"摇摇尾巴游啊游 !");
    }

    //吹泡泡
    public void bubble(){
        System.out.println(name+"吹泡泡...!");
    }

}

class Demo2 
{
    public static void main(String[] args) 
    {
        /*
        Animal a = new Mouse("老鼠");  //多态
        //调用子类特有的方法
        Mouse m  = (Mouse)a;  //强制类型转换
        m.dig();
        */

        Mouse m = new Mouse("米老鼠");
        Fish f = new Fish("草鱼");

        print(f);

    }

    //需求: 定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。
    public static void print(Animal a){ // Animal a   = new Mouse("米老鼠");
        if(a instanceof Fish){
            Fish f = (Fish)a;
            f.bubble();
        }else if(a instanceof Mouse){
            Mouse m = (Mouse)a;
            m.dig();
        }
    }

}

© 著作权归作者所有

Hellation
粉丝 9
博文 57
码字总数 46586
作品 0
西安
私信 提问
加载中

评论(3)

Hellation
Hellation 博主
多态: 父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类 的对象。
Hellation
Hellation 博主
//需求: 定义一个函数可以接收任意类型的动物对象,在函数内部要调用到动物特有的方法。
  public static void print(Animal a){ // Animal a = new Mouse("米老鼠");
    if(a instanceof Fish){
      Fish f = (Fish)a;
      f.bubble();
    }else if(a instanceof Mouse){
      Mouse m = (Mouse)a;
      m.dig();
    }
  }
Hellation
Hellation 博主
目前多态情况下不能访问子类特有的成员。如果需要访问子类特有的成员,那么需要进行类型强制转换.
Animal a = new Mouse("老鼠"); //多态
a.dig(); 编译错误,因为左边编译时没有 dig() 方法;

强制转化
Mouse m = (Mouse) a; //强制类型转化
m.dig();
编程思想 Java中对象的本质

Bruce Eckel 前辈写的《Java编程思想》把问题探讨得非常深入,非常建议同行都学习一下。学习 Java 语言时,老师告诉你 What,自己练习知道 How ,Bruce Eckel 告诉你Why 。 之前已经把后面的...

木云凌
2016/02/23
123
0
Java基础进阶 第四天 抽象接口多态

今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为; 猫的行为:抓老鼠;吃...

Villain丶Cc
2018/06/03
0
0
Java开发每日复盘2018_0514

今天主要跟大家分享3个部分: 一、「Java的核心机制」 二、「Java命名规范」 三、「Java数据类型相关」 下面我们来一个一个的说: 「Java核心机制」 Java是一种强制面向对象的解释型语言(O...

ZeroOSTalk
2018/05/14
0
0
Java 面向对象2 构造器 继承 多态性 初始化块

深入构造器 构造器是一个特殊的方法,用于创建实例时执行初始化。 使用构造器执行 当创建一个对象时,系统为这个对象的实例变量进行默认初始化,这种默认的初始化把所有基本类型的实例变量设...

布still
09/29
0
0
Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 上接:Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上) 五:再谈继承 继承是一种联结类的层...

长平狐
2012/11/12
142
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
80
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部