class A
{
String name="张三";
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
{
String name="张三";
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
解决方案 »
- 为什么此处e没有被实例化就可以直接调用printStackTrace()方法?
- 自定义的class,在import的时候为什么会出现软件包不存在?
- 大家觉得张孝祥的java视频教程基础篇和高级篇怎么样,给点建议小弟准备买!谢谢!
- 如何实现server监听多个客户机的连接请求
- Java如何把控制台模式(就是DOS那样的)实现(模拟)在一个GUI组件中,比如JTextArea,就象Java控制台那样的效果
- 各位大侠我想问一JLable 可不可以定意成数组呀!
- 求匹配JAR名字的正则表达式
- java开发
- 关于奔4不支持jdk1.2的再问题!!!
- 新手求问Java数组问题
- 我想把JButton锁定住,不知道函数,请指教.
- jtable中如何设置每一列所能输入的最大字符数?
把A改成B,就可以了,因为如果x是A类型的引用,是不会有访问age的入口的。
A类中有name该数据,B类继承于A类,所以B类自然就遗传了A类中的name.
而你在B类中,你定义了一个A类中所没有定义过的数据,这就是所谓的变异了.
你使用A类的引用关联到B类对象,那么,你就只能通过A类的引用来调用B类中属于遗传的那部分数据,变异出来的数据是无法调用的.
在动态编译的过程中,成员变量访问的是 申明类(A)的成员变量,访问的成员方法是B中定义的成员方法