不好意思,我应当在基础类发这个问题的,但是基础类没有回答这个问题,这个问题对于我来说很难,理解,不知道大家是怎么理解这个问题的,请指教小弟一二,不胜感激.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;
}

解决方案 »

  1.   

    public class B extends A{
    String name = "B张三B";
    public static void main(String args[]) {
    A x = new B();
    System.out.println(x.getClass().getName()); //返回B
    System.out.println(x.age);
    System.out.println(x.name);
    }
    }class A {
    int age = 20;
    String name = "A张三A";

    }==========
    可以这样完成。不过如果要你那样, x.age  要强行转换为((B)x).age
      

  2.   

    楼上的正解.System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么.你这句理解错了,x其实是A的变量,你要用一定要强行转换.
      

  3.   

    A x = new B();
    x.age这种调用方法本来就不符合程序设计的思想,如果想要直接调用x.age,那还不如一开始就声明成B x = new B()这样更好,既然声明成A,那么对于下面的程序就应该是透明的,没有人知道原来它是一个B,就应该认为它就是一个A。
      

  4.   

    值得学习..我也是刚学JAVA的..还有很多地方很迷茫.!
      

  5.   

    谢谢楼上的回答,.还有一个小疑问,有人回答完就结贴谢谢各位帮忙了.问题如下: 
    class A
    {
    String name="张三";
    int age=30;
    void qq()
    {
    System.out.println("第一次");
    }
    public static void main(String args[])
    {
        A x=new B();
        System.out.println(x.name);
    x.qq();
    }
    }
    class B extends A
    {
    int age=20;
    void qq()
    {
    System.out.println("第二次");
    }}请问一下,上面申请了一个A类的引用X指向B类的实例,为什么x.name是访问A类的成员变量,而x.qq()是访问B类的成员方法.我是这么认为的,引用X要么都访问A类的成员变量,和成员方法,要么都访问B类的成员变量和成员方法,怎么交叉访问了,请问一下,有什么规律吗?
    请大家给我说一下它的运行机制好吗?谢谢.
      

  6.   

    B实现了对qq()的重载,而对name没有.
    可以这样实现. B(){
    name="sd";
    }
      

  7.   

    你使用A类的引用来指向B类的对象.这叫用父类引用指向子类对象.
    由于B类继承于A类,所以,B类将拥有A类中所有的属性和方法(得看修饰符,如果是private的就没办法了).这叫遗传.所以,你使用x.name所打印出来的东西,与A类中的无异.
    还有一种叫变异的,就像你的qq(),B类继承了A类,B类拥有了一个和A类中一样功能的qq()方法,但你在B类中,重写了该方法,所以,你用x.qq()打印出来的是B类中的方法.如果你想在B类中打印出A类中的qq().可以使用super.qq();至于 shan1119(大天使,卐~解!)  说B实现了对qq()的重载...估计他一时间打错了..这是重写,不是重载.