【问题标题】:What's the point of having a constructor in an abstract class in Java? [duplicate]在 Java 的抽象类中使用构造函数有什么意义? [复制]
【发布时间】:2014-12-27 04:47:33
【问题描述】:

如果你永远不会从那个类实例化一个对象,你什么时候会使用它的构造函数?对不起,如果我表现得无知。我刚在高中开设了 Java 课程。

【问题讨论】:

  • any类中构造函数的意义在于初始化类的状态。
  • Abstract 类可能具有与其父类不同的初始化要求,或者可能需要充当它们的代理。它们也可以作为实现的便利

标签: java


【解决方案1】:

你可以在父类中初始化一些东西,所以也许你需要抽象类中的构造函数。

【讨论】:

    【解决方案2】:

    您有一个构造函数,因此子类可以正确初始化其父类的状态。

    public abstract class Parent {
        private final String name;
    
        public Parent(String n) { this.name = n; }
    
        public String getName() { return this.name; }
    }
    
    public class Child extends Parent {
        public Child(String name) { super(name); }
    }
    

    没有其他方法可以在Parent 中初始化private final String name 属性没有构造函数。

    【讨论】:

    • 谢谢!我现在明白了
    【解决方案3】:

    因为子类可能会使用它。例如:

    public abstract class Foo {
        protected String name;
        public Foo(String name) {
            this.name = name;
        }
    }
    
    public class Bar extends Foo {
        public Bar(String name) {
            super(name); //<-- necessary, otherwise it won't compile
        }
    
        public Bar() {
            super("default name"); // <-- necessary, otherwise it won't compile
        }
    }
    

    【讨论】:

      【解决方案4】:

      您的父类或抽象类通过所有子类或子类存储公共变量。 这使得将不同的对象(具有相同的父对象)存储到诸如 ArrayList 之类的集合中变得更加容易。 它还允许您轻松地操作和对象,而不必担心包含在子类中的细节。 您确实通过在子类中调用 super() 来实例化构造函数。

      【讨论】:

        猜你喜欢
        • 2014-04-23
        • 2011-03-11
        • 2018-09-10
        • 2014-01-15
        • 2013-11-25
        • 1970-01-01
        • 2012-12-25
        相关资源
        最近更新 更多