• 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数据分析----Numpy函数应用(二)
    十九章总结 Java绘图
    信奥中的数学之入门组(面向小学四年级至六年级以及初一学生)
    【MySQL面试题】建立a,b,c三个字段的联合索引,判断下列语句是否使用到索引?用到了哪些索引?(通过explain的key_len来判断)
    jmeter跨平台运行csv等文件
    Git与GitHub:解锁版本控制的魔法盒子
    Mysql范式设计原则介绍
    震精!京东T8大牛每天熬夜到凌晨三四点,竟然是在写Docker教程
    Splunk UBA 之 Kubernetes 证书过期
    Docker 容器编排
  • 原文地址:https://blog.csdn.net/beidideshu/article/details/127811842