• java父类与子类之间的转化


    父类与子类

    总的来说一句

    实例化是谁,谁提供成员变量以及属性。谁声明,用谁的变量与函数的范围。
    这个可能与对象的实现机制有关,后面扒一扒java底层和jvm应该好理解。

    关系

    父类就是被继承的那个类,也叫做基类、超类。子类就是继承父类的类。他们之间的关系主要
    是以下几点
     1.声明表示调用范围。
     2. 实例化表示最终的对象类型。
    解释如下
    
    • 1
    • 2
    • 3
    • 4
    • 5

    父类与子类之间,除了父类实例化的不能强制转换成子类,其他的都可以。比如父类声明子类实例化,可以将父类强制转换成子类,而子类声明子类实例化的也可以强制转化成父类。
    对于调用范围一说,看它声明是父类还是子类,父类只能调用父类所包含的属性,但调用的还是实例化对象的。

    举个例子

    A为父类 B为子类。

    1. A声明B实例化(new出来的那个),则只能调用A所拥有的属性,但是调用的属性是由B(实例化提供的)。如果强制转换成B,则调用属性可以为B的
    2. B声明B实例化,如果强制转换成A的话,如1中所说。

    代码

    父类

    就一个DO函数

    public class class1 {
        public void DO(){
            System.out.println("class1");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    子类

    子类重写父类的DO函数

    public class class2 extends class1 {
    
        public void DO(){
            System.out.println("子类");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Main

    public class main {
        public static void main(String[] args) {
            //父类声明父类实例化
            father father1 =new father();
            father1.DO();
    
    
            //父类声明子类实例化
            father father2 =new son();
            father2.DO();
            //父类声明子类实例化强制转成子类
            son son1 =(son) father2;
            son1.DO();
    
    
            //子类声明子类实例化
            son son2=new son();
            son2.DO();
            //子类声明子类实例化
            father father3=(father) son2;
            father3.DO();
            
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述
    结果看一下,除了父类声明父类始化输出不同,其他子类实例化的输出都一样。

    父类声明父类实例化 强制转换成子类(error)

    public class main {
        public static void main(String[] args) {
    
            //父类声明父类实例化
            father father1 =new father();
             //father1.DO();
    
             son son=(son)father1;
             son.DO();
            }
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
    ERROR的,父类实例化不能强制转化成子类的。

    总结

    • 父类实例化不能强制转化成子类的。
    • 实例化是谁,用谁提供成员变量以及属性。。。。谁声明,用谁的变量与函数的范围。
  • 相关阅读:
    Python使用CV2库捕获、播放和保存摄像头视频
    如何在服务器中创建python虚拟环境
    第6节-PhotoShop基础课程-认识选区
    客服测试12345678
    ESP32 之 ESP-IDF 教学(十七)——组件依赖
    Docker实战-第一章欢迎来到Docker世界
    leetcode困难之1127. 用户购买平台
    【GPUImage】同步队列死锁问题解决-借助dispatch_queue_set_specific
    【商业论证】
    【刷题记录12】Java工程师丨面试必会进程线程问答
  • 原文地址:https://blog.csdn.net/beidideshu/article/details/127811842