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

标签 java class date inheritance constructor

我看到子类的构造方法被用于具有父类(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/

相关文章:

php - php 文件中的动态跨度类。

python - 从 Pandas DataFrame 中选择日期范围

java - 如何按今天/本周/本月对日期数组进行排序 - android

java - 创建可分割类

python - 如何从python中的另一个类访问类变量?

Java:意外的 InputStream 行为

c++ - 拥有大量重载的类构造函数是否被认为是不好的编程实践?

Java GSON JsonSerializer 未将模型的日期类型字段转换为长值

java - Eclipse 插件 : how to update a view once a Job is complete

java - Spring/MyBatis 事务回滚