首页 > 其他分享 >向上和向下转型问题

向上和向下转型问题

时间:2023-02-04 22:11:53浏览次数:39  
标签:System 子类 转型 cat sleep animal println 向下 向上

Java 中对象类型之间的类型转换(前提是两个类是父子关系)

在这里插入图片描述

1.向上转型:把子类对象直接赋给父类引用,自动进行类型转换。

静态方法/成员变量(包括静态变量和实例变量)同“父类引用”所声明的类型的方法/变量绑定,例如,animal.staticEat()、animal.name 和 animal.staticName 都是与 Animal 类进行绑定。
使用向上转型不能调用子类中特有方法和变量
使用向上转型调用的是子类覆盖或继承父类的方法

在这里插入图片描述

2.向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,必须进行强制类型转换(父类拥有的成员子类肯定也有,而子类拥有的成员,父类不一定有)。

向下转型必须转换为父类引用指向的真实子类类型,不是任意的强制转换,否则会出现 ClassCastException
向下转型时可以结合使用 instanceof 运算符进行判断
向下转型调用的是子类的方法和变量、可以调用继承于父类的方法和变量

img

当我们使用经典多态写法 Father f=new Son()时,如果子类和父类存在同名的成员变量和静态变量时,是什么情况呢?

class Animal{
   static String name = "animal";
   int num = 1;
   public void run() {
       System.out.println("animal run");
  }
   public static void sleep() {
       System.out.println("animal sleep");
  }
}

class Cat extends Animal{
   static String name = "cat";
   int num = 2;
    public void run() {
        System.out.println("cat run");
    }
    public static void sleep() {
       System.out.println("cat sleep");
  }
}

public abstract class test4 {
   public static void main(String args[]) {

       Cat cat = new Cat();
       System.out.println(cat.num);
       System.out.println(cat.name);
       cat.run();
       cat.sleep();
   
       System.out.println("=================");
       Animal animal = new Cat();
       System.out.println(animal.num);
       System.out.println(animal.name);
       animal.run();
       animal.sleep();
  }

}

输出结果如下所示

二、解释 对于多态中的静态变量、静态方法、成员变量来讲,编译看左,运行也看左。无论右边是当前类还是当前类的子类,编译和运行期间执行的都是当前类中的方法。   对于多态中的非静态方法,编译看左,运行看右。也就是在编译期间看左边的类中有无该方法/属性,而实际在运行时执行的是右边类的方法/属性。如果编译期间没有在左边的类找到该非静态域,则会报编译错误。

上述问题的解释:

static name: 此为静态变量,运行都看左边,所以cat输出cat,animal输出animal num: 成员变量,运行看左边,所以cat输出2,animal输出1 run(): 非静态方法,看右边,cat和animal都使用Cat类的方法,即输出cat run static sleep(): 静态方法,看左边,故cat输出cat sleep,animal输出animal sleep

标签:System,子类,转型,cat,sleep,animal,println,向下,向上
From: https://www.cnblogs.com/GO8k/p/17092511.html

相关文章

  • 低代码开发平台 打开数字化转型普惠之门
    时至今日,越来越多的企业与组织开始达成这样一个共识:数字化,已成为所有行业业务创新的底层逻辑。在互联网快速发展和疫情的催化作用下,各个行业都加强了数字化建设方面的投入。......
  • 阅读《向上管理》
    作者:萧雨阅读时间:2023.01所写内容仅代表本人所感所想。如若指正,欢迎留言讨论。领导之所以器重你,是因为公司需要你,而并不是源于纯粹的友谊。-----职场真相掌握拒绝的艺术对......
  • 管理会计数字化转型
    一、数字化转型对管理会计的要求管理会计,服务于企业的经营与管理,在企业的数字化转型过程中也面临更高的要求与更大的挑战。财务人员需要从核算型向管理型去转变,需要从......
  • 解决移动端页面向上移动问题
    在PC上网页是固定的,但是到了移动端滑动到底时,页面总要向上移动一点,查了各种方法都没有效果,后来在CSS里试了试这个方法:    *{            margin......
  • 企业数字化转型,工具先行
    随着新一代信息技术的发展,以及企业对降低成本、增加效益的不断追求,数字化转型成为越来越多企业的选择。而企业进行数字化转型,必然离不开对工具的使用,只有选择合适的数字工......
  • java:日期转型将“2023-03-14 00:00:00“转为年月日
    java:日期转型将"2023-03-1400:00:00"转为年月日old="2023-03-1400:00:00"Datedate=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").parse(old);old=newSimpleDateForm......
  • 分布式核心,中电金信获数字化转型突出贡献奖!
    近日,由《金融电子化》杂志社主办的“2022中国金融科技年会暨第十三届金融科技应用创新奖颁奖典礼”成功举办。中电金信“基于全栈创新技术的银行分布式核心系统”经过层层遴......
  • MySql通过父id递归向下查询子节点
    不用写存储过程,不用建数据库函数,一段sql就可以实现不用写存储过程,不用建数据库函数,一段sql就可以实现不用写存储过程,不用建数据库函数,一段sql就可以实现SELECT ID.LEVE......
  • 《一个程序猿的生命周期》-《发展篇》- 43.从技术向市场转型的感悟。注:对2022年的总结
       完全放弃对技术团队的管理,孤身一人闯市场,确实需要一定的勇气。但是光有勇气就像无头的苍蝇,还得有技术、产品、方案和市场生态,当然最终也有运气的成分。技术、产品......
  • 华为云大数据赋能北港集团发展创新,数字化转型成效显著!
    ​众所周知,现代物流是市场经济高度发展的必然产品,能够最有效实现产品的时空价值。而港口作为物流系统的重要节点,是水陆空交通的集结点和枢纽,工农业产品和外贸进出口物资的集......