【发布时间】:2013-05-31 02:37:32
【问题描述】:
提前感谢您的阅读。
我所说的“重新定义”是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 中定义最小值/最大值,我将隐藏另一个字段;实际上,这是实现“重新定义”属性的最简单方法。有人投票支持这种实现方式吗?
public Duration min/max;
2) 然后我介绍了“Getter”,太好了,Oracle 描述了“协变返回类型”,所以这种方式有效。 但是,我必须向下转换类型才能使其工作。
3) 但是,对于“Setters”,如果我添加“@Override”,我会得到错误。我认为这是有争议的;首先,我必须承认甲骨文明确表示这不是覆盖。其次,我认为它是“覆盖”,只是 Oracle 还没有实现它。我错了,因为我不知道他们这样做的原因吗?
4) 你对 UML 的 Re-defined 属性的实现是什么?
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();
}
}
【问题讨论】:
-
请遵守 Java 约定并以 小写字母 开头的方法名称,例如
setMin(...)。大写字母用于类名。
标签: java attributes redefine