Python中文网

一个关于 编程问题的解答网站.

有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

构造函数java强制扩展类

在Java中,我能强迫一个扩展了抽象类的类用一个对象作为参数来实现它的构造函数吗

差不多

public abstract class Points {

    //add some abstract method to force constructor to have object.
}

public class ExtendPoints extends Points {

    /**
     * I want the abstract class to force this implementation to have
     *  a constructor with an object in it?
     * @param o
     */
    public ExtendPoints(Object o){

    }
}

共 (4) 个答案

  1. # 1 楼答案

    您可以在抽象类中使用带有参数的构造函数(如果您想禁用匿名子类,请将其设置为受保护)

    public abstract class Points{
        protected Points(Something parameter){
            // do something with parameter
        }
    }
    

    这样做,您将强制实现类具有显式构造函数,因为它必须使用一个参数调用超级构造函数

    但是,不能强制重写类具有带参数的构造函数。它总是可以像这样伪造参数:

    public class ExtendPoints extends Points{
        public ExtendPoints(){
            super(something);
        }
    }
    
  2. # 2 楼答案

    如果向点添加public Points(Object o) {}构造函数,则会强制任何子类构造函数调用该超级构造函数。然而,我认为没有办法确保子类使用那个确切的构造函数签名

  3. # 3 楼答案

    正如之前其他人所说,构造函数的签名不能强制执行,但是可以通过使用AbstractFactory模式强制执行一组特定的参数。然后,您可以定义factory接口的创建方法,使其具有特定的签名

  4. # 4 楼答案

    没有构造函数不是继承的,所以每个类都需要提供自己的构造函数,除非您没有指定构造函数并获得默认的无参数构造函数