class Base{
public String name;
public int age;
public Base(String name,int age)
{
 this.name=name;
 this.age=age;
}
public void setAge(int newage)
{
 this.age=newage;
  }
public void print()
{
 System.out.println("Basename:"+name+" Baseage:"+age);
}
}public class Sub extends Base{
private double grade;
public Sub(int age,String name,double grade)
{
 this.name=name;
 this.age=age;
 this.grade=grade;
}
public static void main(String[] args)
{
 Sub s=new Sub(23,"zpc",90);
 s.setAge(25);
 s.print();//输出子类对象的属性值
 System.out.println("s.grade:"+s.grade);//90
 //System.out.println("s.age:"+s.age);//25
 //System.out.println("s.name:"+s.name);//zpc
}

}

解决方案 »

  1.   

    通得过就怪了吧?public Sub(int age,String name,double grade)
    { // 由于父类没有缺省构造函数,所以第一句话必须是super(xxoo);
    this.name=name; // 子类根本没有父类name属性的访问权利,父类是private
      

  2.   


    老师,我都是写的public的。
      

  3.   

    顺便问一下 ,您有了多少年的Java开发经验了?什么职位目前。
      

  4.   

    集成的时候子类会默认调用父类的无参构造器,但是你的Base由于有了个public Base(String name,int age)的构造函数,所有Base需要自己去写一个无参数的构造函数。或者你可以把子类的构造函数写成这样:
    public Sub(int age, String name, double grade) {
    super(name, age); this.name = name;
    this.age = age;
    this.grade = grade;
    }
      

  5.   

    public Sub(int age, String name, double grade) {
    super(name, age);
    this.grade = grade;
      

  6.   

    public Sub(int age,String name,double grade)
    {
    super(name,age) ;  //加上这一行
    this.name=name;
    this.age=age;
    this.grade=grade;
    }super(name,age) ;  //加上这一行
    或者 在 Base类中增加 
    public Base(){
    }
      

  7.   


    悲剧,我还以为是你另一个帖子里面的定义没注意你这个已经修改为public了。另外那个super构造的问题别的楼层解释的比较清楚了。其实没开发多少年,现在基本转行在写文档了,惭愧惭愧。
      

  8.   

    两个解决办法:
    1 在Base 类里加上:public Base(){};
      子类不动。
    2 Base类里不动,修改子类构造函数。即将:
    public Sub(int age,String name,double grade)
    {
    this.name=name;
    this.age=age;
    this.grade=grade;
    }
    该为:
    public Sub(int age,String name,double grade)
    {
    super(name.age);
    this.grade=grade;
    }
      

  9.   

    super (name,age); 不是点。
      

  10.   

    java的类,如果没有定义构造器,会有一个默认的构造器。但是,如果你定义了自己的构造器,就需要显示的声明默认构造器了~~~
      

  11.   


    初始化和实例化不是同一个概念吧,构造函数只是初始化的功能。饿,其实我也不清楚。也没有什么全面一点的好Java学习书。我是初学者,不想被烂书误导。
      

  12.   

    Thinking In Java 这本书其实非常好。