public class A
{
int a;
public A()
{
a = 10;
}
public void foo()
{
System.out.println(a);
}
}
public class B extends A
{
int a;
public B()
{
a = 11;
}
public static void main(String[] args)
{
A aInstance = new A();
aInstance.foo();
B bInstance = new B();
bInstance.foo();
}
}
最后的运行结果是:
10
10
有点出乎意料,不是应该:
10
11
吗?bInstance有两个同名的变量a,为什么使用了基类的,而不优先使用子类的呢?
{
int a;
public A()
{
a = 10;
}
public void foo()
{
System.out.println(a);
}
}
public class B extends A
{
int a;
public B()
{
a = 11;
}
public static void main(String[] args)
{
A aInstance = new A();
aInstance.foo();
B bInstance = new B();
bInstance.foo();
}
}
最后的运行结果是:
10
10
有点出乎意料,不是应该:
10
11
吗?bInstance有两个同名的变量a,为什么使用了基类的,而不优先使用子类的呢?
解决方案 »
- throw的问题
- 一道算术题(java):4~20的floal数值(小数点后四位),0~100的整数作为它的量程同时输出-->a=4的时候b=0,a=20的时候b=100。用什么方法可以打印出中间的数值对。
- Java Swing疑惑
- 关于Graphics.drawString的坐标的问题
- 怎么在String中分析出数字?请教
- 求助:为什么子类(抽象类)要将父类(实体类)中的实例方法重写成抽象方法?
- 新手问题:在环境变量中怎么加上.(dot)?
- 如何去掉一个全是数字的字符串的前面的0?
- 如何设置JTABLE某一个单位格的TEXT的值
- 请教如何通过applet实现网上历史曲线功能,类似股票行情的东东!!!!!!!
- 如何使用jdom1.0库?
- 十万火急啊
方法在基类还是在子类中不重要吧,毕竟只是代码段的一段代码而已,调用这段的代码的时候会把this指针传入。
{
int a;
public A()
{
a = 10;
} public void foo()
{
System.out.println(a);
}
}
public class B extends A
{
int a;
public B()
{
a = 11;
}
public void foo()
{
System.out.println(a);
} public static void main(String[] args)
{
A aInstance = new A();
aInstance.foo();
B bInstance = new B();
bInstance.foo();
}
}
而父类中方法却是不能访问子类中的变量的。
很明显B中定义了一个a,把A中的a隐藏起来了,因些,
B中新定义的方法访问到的a都是B中的a变量。
如果要在B中访问A中的a,要加上super才能办到。