为什么对象类型的引用变量用作其他对象类型时必须进行强制转换

2023-12-12

虽然Java中的所有类都是Object类的子类,但与其他对象类型不同,Object类型的引用变量在没有强制转换的情况下不能分配给任何其他引用类型。

例如:

public class Inheritance {

    public static class Animal {        
        public void Scream() {
            System.out.println("I'm an animal");
        }       
    }

    public  static class Mammal extends Animal{
        public void Scream(){
            System.out.println("I'm a mammal");
        }       
    }

    public  static class Tiger extends Mammal{
        public void Scream(){
            System.out.println("I'm a tiger");
        }       
    }

    public static void main (String[] args){

        Animal tiger = new Tiger();
        tiger.Scream(); //true

        Object tiger = new Tiger();
        tiger.Scream(); //false

        Object tiger = new Tiger();
        ((Animal) tiger).Scream(); //true

    }

}

你想知道为什么我们使用显式类型转换。 这都是关于继承的 -

让我澄清这一点—— 假设我们有两个班级Class A and Class B. And Class B是一个子类class A。这意味着Class B具有以下所有功能Class A, 这意味着Class B可以做任何事Class A可以做。 因此,如果

 A a = new B();

完全没问题,因为Class B可以做什么class A可以做。 这里引用变量a是A类类型,从a中,A类的所有方法都可以调用。现在的对象B(new B();) 具有以下所有功能Class A(作为继承)所以所有方法Class A将是可调用的。

如果我们像这样反转条件 ->

      B b =new A();

不可能,因为可能Class B实现它自己的功能(方法和变量),这些功能不在Class A。但这里引用变量是类型B, 的所有功能Class B将是可调用的,但实际对象是类型A所以会出现错误。

同样的情况是类对象.由于所有其他类自动继承Object Class.

因此,当任何具有 Class Object 类型的引用变量的对象需要显式强制转换时,因为这不确定该对象包含哪些或多或少的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么对象类型的引用变量用作其他对象类型时必须进行强制转换 的相关文章

随机推荐