gpt4 book ai didi

java - 父类(super class)类型对象的子类的构造方法?

转载 作者:行者123 更新时间:2023-12-01 18:26:54 25 4
gpt4 key购买 nike

我看到子类的构造方法被用于具有父类(super class)类型的变量。例如:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

formatterDateFormat 类型对象还是 SimpleDateFormat 类型?由于 SimpleDateFormat 类继承自 DateFormat,因此它可能比其父类(super class)拥有更多的方法。 formatter 调用这些函数的实例是否只能存在于 SimpleDateFormat 而不是 DateFormat 中?在这种情况下,DateFormatSimpleDateFormat 可以互换吗?如:

SimpleDateFormat formatter = new DateFormat ("yyyy-MM-dd");

最佳答案

formatter 的运行时类型由用于实例化它的构造函数确定,其编译时类型是您在声明中使用的类型。您无法在格式化程序上调用存在于其实际运行时类型而不是其声明类型上的方法,除非您使用强制转换来解析方法调用。

顺便说一句,您可以通过简单的实验来回答自己的问题:

public class SuperClass {
public void test() {
System.out.println("Test");
}

public static class SubClass extends SuperClass {
public void testSub() {
System.out.println("Test sub");
}

@Override
public void test() {
System.out.println("Override test");
}
}

public static void main(String[] args) {
SuperClass sc = new SuperClass();
sc.test(); // prints Test
sc = new SubClass();
sc.test(); // prints Override test
sc.testSub(); // does not compile
((SubClass) sc).testSub(); // prints Test sub
}
}

关于java - 父类(super class)类型对象的子类的构造方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com