提前感谢您的阅读。
我所说的“重新定义”是广泛使用的UML规范中的概念。
我的理解是: “重新定义”属性的类型是“重新定义”属性类型的子类。而“重新定义”属性的所有者是“重新定义”属性的所有者的子类。
给出以下示例:
Duration extends ValueSpecification
DurationInterval extends Interval
Interval has two attributes typed by ValueSpecification, min and max;
DurationInterval has two "redefined" attributes typed by Duration, min and max;
这是我的实现:
1) 如果我在 DurationInterval 中定义 min/max,我将隐藏另一个字段;实际上,这是实现“重新定义”属性的最简单方法。有人投票支持这种实施吗?
public Duration min/max;
2)然后我介绍了“Getter”,太好了,Oracle描述了“协变返回类型”,所以这种方式有效。但是,我必须向下转换类型才能使其工作。
3) 但是,对于“Setters”,如果我添加“@Override”,我会得到错误。我认为这是有争议的;首先,我必须承认甲骨文明确表示这不是覆盖。其次,我认为它是“覆盖”,只是 Oracle 还没有实现它。我错了,因为我不知道他们这样做的原因吗?
4)你对UML的重新定义属性的实现是什么?
public class RedefineProj {
static class ValueSpecification{}
static class Duration extends ValueSpecification{}
static class Interval{
public ValueSpecification min;
public ValueSpecification max;
public ValueSpecification getMin(){
return min;
}
public ValueSpecification getMax(){
return max;
}
public void setMin(ValueSpecification min_){
min = min_;
}
public void setMax(ValueSpecification max_){
max = max_;
}
}
static class DurationInterval extends Interval{
@Override
public Duration getMin(){
return (Duration) min;
}
@Override
public Duration getMax(){
return (Duration)max;
}
public void setMin(Duration min_){
min = min_;
}
public void setMax(Duration max_){
max = max_;
}
}
public static void main(String[] args) {
// TODO code application logic here
Interval i = new Interval();
ValueSpecification v = i.getMax();
DurationInterval di = new DurationInterval();
Duration d = di.getMax();
}
}