java怎么让类中必须有某个属性?

关于设计的问题。
我现在有一个功能要有可扩展的实体类,在需要的时候可以更换这些实体类达到不同的效果。
但是现在要求这些类里面有属性。没错,属性!不是方法!
而且这个属性不能使固定值,也就是说,这个类必须有某个属性,但是我不可能每次在开发这个功能的时候都告诉某个人:这个类要有什么什么属性。
打个比方:
我现在有个长方型概念。
长方体一号,必须有宽高,可以是任意值。
长方体二号,也必须有宽高。

构造器带参数,子类必须实现带参数的构造器,且由于父类没有,没有参数的构造方法,子类必须有构造器,参数可以和父类的不同,但是super必须符合父类。

public class Parent {
    int a;

    public Parent(int a, int b) {
        this.a = a;
    }
}

public class Children extends Parent{  
    //可以
    public Children(int a) {
        super(a, 0);
    }
}

class Children2 extends Parent {
    //可以
    public Children2() {
        super(1,2);

    }
}

class Children3 extends Parent {
    //可以
    public Children3(int a, int b) {
        super(a, b);
    }
}

class Children4 extends Parent {
    //报错
    public Children4() {
        
    }
}


不就是继承么。。。父类不就是你的长方形概念,子类就是你的1号,2号

需求不明确的时候
比如长方体一号 和 长方体二号没有明确的关联
那么 就可以把 所有参数都这样定义
public object o1;
public object o2;
public object o3;
public object o4;
谁要用,谁就给他转换成自己想要的值

那就是写一个Shape类,有长,宽的属性,并且实现长宽set和get方法,然后写一个Rect类,继承Shape,这样Rect实例化的时候自然就都有长和宽的属性,可以通过set方法为每个Rect设置不同长和宽

定义一个基类,定义公共属性,然后设置子类继承

这里使用kotlin 写的。不太清楚题主是否对kotlin语法熟悉 ☺

1.按照题主说的,是必须有某个属性。具体情况具体考虑。 使用接口或者抽象类,普通类都可以满足题主的要求。
如下:


/**
 * 正方体
 * 接口形式
 */

interface Cube {
    var with: Int
    var height: Int
}

/**
 * 正方形
 */
class Square : Cube {
    override var with: Int
        get() = TODO("Not yet implemented")
        set(value) {}
    override var height: Int
        get() = TODO("Not yet implemented")
        set(value) {}

}
//抽象类方式

abstract class AbstractCube() {
    abstract var with: Int
    abstract var height: Int
}

class Square1 : AbstractCube() {
    
    override var with: Int
        get() = TODO("Not yet implemented")
        set(value) {}
    override var height: Int
        get() = TODO("Not yet implemented")
        set(value) {}

}