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