有两个类
public calss Father{
    public String name;
    public int age;
}public calss Son extends Father{
   public String personal;   public static void main(String args[]){
       Father mySon=new Son();
       mySon.personal="ssss"    //我想问这里为什么是错的?mySon不是只想Son吗,为什么得不到他的成员变量personal
       //如果写成
       Son mySon=new son();
       mySon.personal="ggg";这样就是可以的
}}

解决方案 »

  1.   

    Father mySon=new Son();
    Father里是看不到子类的这个成员变量的。
    多态问题。
      

  2.   

    把Son实例赋给 Father引用,是向上转型。该引用只能访问基类和导出类(子类)共有的属性,不能访问,子类特有属性。
      

  3.   

    Father mySon=new Son();
    虽然mySon指向Son()实例,但他已经向上转型为Father,这个mySon可以调用Father和Son的共有属性和方法,但对于只有Son()才有的属性和方法,他不识别,因为Father没有这些属性和方法,也就是说Son是一个Father,但Father不是一个Son,无法向下转型,因为他不知道要转为那个
      

  4.   

    Father mySon=new Son();
    父类去调用子类的方法和成员变量,不对吧!!
      

  5.   

    这里解释得很清楚啦,如果真要调子类的可以强制转型((Son)mySon).personal="ggg";
      

  6.   

    你必须得通过向下转型啊。Father mySon=new Son();
    Son son = (Son)mySon
      

  7.   

    恩  就是这样
    向上转型是安全的,因为基类不会具有大于导出类的接口;但向下转型是不安全的,在运行期会对其检查,以便保证他是我们需要的类型,如果不是,就会抛出ClassCastException的异常
      

  8.   

    public calss Son extends Father
    这个public需要删除
      class都写不对:
    害我找了好多才能运行!