我是第二学期学习计算机科学的新手。对不起德语课程。但我希望理解它不会是一个问题。它基本上是关于转换货币。
我的问题是:作为变量/数据类型的类的功能在这里是什么?我的意思是在类dm(deutsche mark)中你有一个带有给定参数的构造函数(Euro a)。我应该将“a”视为欧元类别的新对象吗?或者究竟是什么?我在很多场合看到过这种变量,显然它很常见。我希望有人能帮帮忙。
谢谢!
梅尔
public abstract class waehrung {
public abstract double dollarBetrag();
}
public class Euro extends waehrung {
private static double kurs = 1;
private double wert;
public Euro(double wert){
this.wert = wert;
}
public double dollarBetrag(){
return wert*kurs;
}
public double euroBetrag(){
return wert;
}
public static void setEuroKurs(double Kurs){
kurs = kurs;
}
}
class DM extends Euro{
public DM (double dm){
super(dm/1.95583);
}
public DM(Euro a){
super(a.euroBetrag());
}
public double waehrungsBetrag() {
return euroBetrag()*1.95583;
}
}
答案 0 :(得分:1)
您应该将a
视为对类Euro
的对象的引用。它来自用于构造DM
对象的代码:
DM dm = new DM(euro);
其中euro
是对类Euro
的某个对象的引用。在构造函数中,这变为a
。
答案 1 :(得分:1)
问题:
这里作为变量/数据类型的类的功能是什么?我的意思是 在类dm(deutsche mark)中你有构造函数 给定参数(欧元a)。我应该把“一个”想象成一个新的对象 欧元?或者究竟是什么?我看到了这种变量 很多场合,显然很常见
public DM(Euro a){
super(a.euroBetrag());
}
答案:a
是一个变量,其类型是欧元,因此a
(称为引用)是指一个Euro对象。您的示例中的欧元对象可以是DM
或Euro
。
答案 2 :(得分:0)
请注意DM
是Euro
的子类,并且在其构造函数中
public DM(Euro a){
super(a.euroBetrag());
}
它调用a.eurobetrag()
并将其传递给超类构造函数:
public Euro(double wert){
this.wert = wert;
}
因此,a
不是DM
类的变量,它只是用于获取值a.euroBetrag()
,然后将其分配给属性wert
:
this.wert = wert;
答案 3 :(得分:0)
public DM(Euro a){
a
不是“新”对象。当程序的其余部分使用此构造函数时,它将需要一个现有的 Euro
对象,如下所示:
Euro someEuroVariable; // for example
...
DM d = new DM(someEuroVariable);
然后构造函数将使用someEuroVariable
作为参数,它将引用为a
。但是没有创建新的Euro
对象。
希望这有帮助。
编辑:回答评论中的问题:你不能说
DM d = new DM();
因为DM
没有可以在没有参数的情况下使用的构造函数。但是,假设您使用了像
DM d = new DM(1.234);
现在你说
Euro a = d;
a
和d
将引用相同的对象。此对象的运行时类型为DM
。当您声明变量a
具有类型Euro
时,这意味着a
在其生命周期内可以是Euro
类型的对象或其任何类型的对象子类。但是,由于编译器无法确定运行时实际类型的内容,因此如果为a.method()
定义了方法,则只能使用方法Euro
。如果DM
包含method2
没有的新方法Euro
,则无法直接使用a.method2()
进行调用。这也意味着稍后,您可以将a
重新分配给具有其他子类的对象:
a = new Lira(100000000000.0);
虽然您无法对d
执行此操作,因为它只能是DM
类型或DM
的子类:
d = new Lira(100000000000.0); // Error at compile time
编译时类型和运行时类型之间的区别在您习惯之前很难掌握。它与将Euro
作为参数传递给DM
构造函数时发生的情况完全无关;作为参数传递的对象是一个单独的对象,并且必须在调用构造函数之前存在。