调用Object的构造函数

时间:2017-03-29 15:44:17

标签: java constructor

  1. 当类已经有一个参数化构造函数和一个非参数化构造函数时,为什么一个类调用该对象的Object默认构造函数?
  2. 示例

    public abstract class Foo{
        private int dim1;
    
        public Foo(int dim1) {
            super();
            this.dim1 = dim1;
    
        }
        public Foo() {
    
            this.dim1 = 0;
    
        }
    }
    

    2。为什么在上面的示例中的非参数化构造函数中调用了super()方法?

    1. 如果我忘记或者我不想使用super()调用Object类中的构造函数会发生什么?

    2. 调用super()方法(Unparametrized Object's类构造函数)的类是否抽象是否重要?

2 个答案:

答案 0 :(得分:2)

  

当类已经有一个参数化构造函数和一个非参数化构造函数时,为什么一个类调用该对象的Object默认构造函数?

仅仅因为你拥有它,并不意味着它会被自动调用。你必须调用它,这就是对象实例化开始的地方。

  

为什么上面示例中的非参数化构造函数中没有调用super()方法?

这不是一种方法。它只是调用超类默认构造函数。您知道吗,如果您没有调用它,Java编译器会自动插入该语句,同时为您提供字节代码。所以你不需要在子构造函数中写super(),除非你想调用特定的构造函数。

  

如果我忘记或者我不想使用super()调用Object类中的构造函数会发生什么?

别担心。如上所述,编译器会为您插入它。

  

调用super()方法的类(Unparametrized Object的类构造函数)是否抽象是否重要?

是的,抽象与否并不重要。它只是调用超类构造函数。

答案 1 :(得分:1)

1)你可能不应该。这是不必要的。这是一行额外的代码,没有做任何事情。

2)因为如果你的对象没有扩展Object以外的类(就像所有类一样),显式调用super()是完全没有必要的。你可以从第一个构造函数中删除它,什么都不会改变。代码编译相同。

3)没什么。你不需要这样做。

4)这没什么区别。