java父类与子类之间的转化

父类与子类

总的来说一句

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

关系

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

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

举个例子

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");
    }
}

子类

子类重写父类的DO函数

public class class2 extends class1 {

    public void DO(){
        System.out.println("子类");
    }
}

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();
        
    }
}

java父类与子类之间的转化_第1张图片
结果看一下,除了父类声明父类始化输出不同,其他子类实例化的输出都一样。

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

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

        //父类声明父类实例化
        father father1 =new father();
         //father1.DO();

         son son=(son)father1;
         son.DO();
        }
   }

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

总结

  • 父类实例化不能强制转化成子类的。
  • 实例化是谁,谁提供成员变量以及属性,谁声明,用谁的变量与函数的范围。

你可能感兴趣的:(软件架构思想杂记,java)