java 为什么编译器在将子类的对象赋值给父引用时不抛出错误

rdrgkggo  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(123)
class Base {
    public void show() {
        System.out.println("Base class show() method called");
    }
}

class Derived extends Base {
    public void show() {
        System.out.println("Derived class show () method called");
    }
}

public class Main {
public static void main(String[] args) {
    Base b = new Derived();//why is java allowing me to create an object of child class
    b.show();              //how can the Base class hold and use the reference of child
    }                              
}

如果我在子类中创建一个新方法会怎么样??父类是否仍然能够访问新方法??

class Derived extends Base {
    public void show() {
        System.out.println("Derived class show () method called");
    }
    public void poo() {
        System.out.println("take a poo");
    }
}

public class Main {
public static void main(String[] args) {
    Base b = new Derived();
    b.show();   
        b.poo(); 
    }                              
}

为什么java允许我将一个子对象的引用赋值给基类,而不抛出任何警告或错误?

hc8w905p

hc8w905p1#

这被称为polymorphism。任何派生类都可以被认为是父类的示例(无需显式强制转换)。
可以调用的方法和可以访问的字段取决于对象的静态类型。在Base b = new Derived();的情况下,b的静态类型是Base,因此只能调用Base上可见的方法。不能使用Derived中定义的新方法。

相关问题