Java 在对象上强制转换的超类是如何工作的?
假设我有一个超级级Ugrad,如下所示:Java 在对象上强制转换的超类是如何工作的?,java,Java,假设我有一个超级级Ugrad,如下所示: public class Ugrad{ int DM = 140; int perYear() { return DM/4; } } public class Grad extends Ugrad{ int DM = 28; int perYear() { return DM/2; }; //In the line-comments I denote what the result of the print wil
public class Ugrad{
int DM = 140;
int perYear() { return DM/4; }
}
public class Grad extends Ugrad{
int DM = 28;
int perYear() { return DM/2; };
//In the line-comments I denote what the result of the print will be.
public class Tester{
public void main(String[] args){
Grad g = new Grad();
System.out.println(g.DM); // 28
System.out.println(g.perYear()); // 14
Ugrad u = (Ugrad) g;
System.out.println(u.DM); //140
System.out.println(u.perYear()); //14
}
}
我有一个子类叫做Grad,就像这样:
public class Ugrad{
int DM = 140;
int perYear() { return DM/4; }
}
public class Grad extends Ugrad{
int DM = 28;
int perYear() { return DM/2; };
//In the line-comments I denote what the result of the print will be.
public class Tester{
public void main(String[] args){
Grad g = new Grad();
System.out.println(g.DM); // 28
System.out.println(g.perYear()); // 14
Ugrad u = (Ugrad) g;
System.out.println(u.DM); //140
System.out.println(u.perYear()); //14
}
}
现在,我有一个tester类,在其中我进行一些打印以了解对象如何工作,如下所示:
public class Ugrad{
int DM = 140;
int perYear() { return DM/4; }
}
public class Grad extends Ugrad{
int DM = 28;
int perYear() { return DM/2; };
//In the line-comments I denote what the result of the print will be.
public class Tester{
public void main(String[] args){
Grad g = new Grad();
System.out.println(g.DM); // 28
System.out.println(g.perYear()); // 14
Ugrad u = (Ugrad) g;
System.out.println(u.DM); //140
System.out.println(u.perYear()); //14
}
}
我的问题是超级类cast如何在对象上工作?
为什么当u.DM等于140时,u.perYear打印14等于g.DM/2
Grad
对象都隐式地是类Upgrad
的对象,因为
您的声明:Grad扩展Upgrad
。
也就是说,这将起作用:perYear()
方法。
在强制转换到超类并调用此方法后,由于Java的多态性原则和重写规则,它将保持在Grad
类中实现的状态:
事实上,这一问题已经得到了回答,并在Stackoverflow上得到了解决。
引述:
当一个对象的继承层次结构中存在一个方法的多个实现时,“最派生”类(层次结构最底层)中的一个始终覆盖其他实现,即使我们通过一个超类类型的引用引用该对象
Grad
对象都隐式地是类Upgrad
的对象,因为
您的声明:Grad扩展Upgrad
。
也就是说,这将起作用:perYear()
方法。
在强制转换到超类并调用此方法后,由于Java的多态性原则和重写规则,它将保持在Grad
类中实现的状态:
事实上,这一问题已经得到了回答,并在Stackoverflow上得到了解决。
引述:
当一个对象的继承层次结构中存在一个方法的多个实现时,“最派生”类(层次结构最底层)中的一个始终覆盖其他实现,即使我们通过一个超类类型的引用引用该对象
由于
DM
属性不是一个常量变量,因此应按照Java编码约定以所有小写字母拼写。由于DM
属性不是一个常量变量,因此应按照Java编码约定以所有小写字母拼写。