各位大虾哈,本小虾是个JAVA新手,现在遇到一个问题不是很明白,望解决一下下:
class A{
protected double x=22.36;
}
class B extends A{
double x=0.0;
void g(){
y=y+100;
System.out.println(y);
}
public static void main(String[] args){
B b=new B();
B.y=100;
B.g();
A a=new B();
System.out.println(a.y);
}
}
我知道,上转型在调用被子类继承的方法时,调用的是子类重写的方法,但是上面的例子中变量Y被隐藏了(相当重写了,呵呵,我这么认为的),但是调用的时候怎么是原来的22.36,而不是0.0呢?望解释一下~~~~
class A{
protected double x=22.36;
}
class B extends A{
double x=0.0;
void g(){
y=y+100;
System.out.println(y);
}
public static void main(String[] args){
B b=new B();
B.y=100;
B.g();
A a=new B();
System.out.println(a.y);
}
}
我知道,上转型在调用被子类继承的方法时,调用的是子类重写的方法,但是上面的例子中变量Y被隐藏了(相当重写了,呵呵,我这么认为的),但是调用的时候怎么是原来的22.36,而不是0.0呢?望解释一下~~~~
解决方案 »
- 请问,如何用java调用.Net的Web Service?
- 如何在jTable中设置单元格焦点并选中单元格中的内容
- <sql:query>怎么实现类似first,last,next功能?<c:forEach>好象要历遍
- 关于反射的问题
- 在Hibernate中使用sql-query?
- 关于线程,继续讨论,gemouzhi(gemouzhi)请进,
- 为实现java中的native方法,在sample.h和sample.cpp文件都写好以后,怎样生成window平台的dll动态连接库???
- 多线程问题
- 在下初学java,不知道在linux环境下好还是windows下好??是不是linux对java支持比较好??
- io流输出到控制台不能正常显示
- 请教java io流问题
- 如何判断一个char是一个双字节字,还是一个四字节字的前(后)半部
对于普通的方法通过向上转型new 出来的对象调用的是子类中方法,而属性则调用的父类的属性。
public class 上转型调用A {
public double x = 1.234;
public void getA(){
System.out.println("A");
}
}public class 上转型调用B extends 上转型调用A{
public double x = 0.0;
public void getA(){
System.out.println("B");
}
public static void main(String[] args){
上转型调用A a = new 上转型调用B();
a.getA();
System.out.print(a.x);
}
}
输出的是
B
1.234
但如果是static方法,情况就跟属性一样了,是无法上转型的
public class 上转型调用A {
public double x = 1.234;
public static void getA(){
System.out.println("A");
}
}
public class 上转型调用B extends 上转型调用A{
public double x = 0.0;
public static void getA(){
System.out.println("B");
}
public static void main(String[] args){
上转型调用A a = new 上转型调用B();
a.getA();
System.out.print(a.x);
}
}
输出的是
A
1.234我只认识到这个程度