当前位置: 代码迷 >> Java相关 >> JAVA类继承出现一点小问题,求高手帮忙!
  详细解决方案

JAVA类继承出现一点小问题,求高手帮忙!

热度:340   发布时间:2013-07-18 19:36:29.0
JAVA类继承出现一点小问题,求高手帮忙!
我定义并且赋值了三个,为啥只输入ZC,而name和age为什么不显示赋值呢?
class person
{
    private int age;
    private String name;
    public void per(int age,String name)
    {
        this.age=age;
        this.name=name;
    }
    public String info()
    {
        return "name:"+name+"\nage:"+age;
    }
}
class teacher extends person
{
     private String zc;
     private int age;
     private String name;
    public void teach(String zc)
    {
      
        super.per(age, name);
          this.zc=zc;
        // TODO 自动生成的构造函数存根
    }
    public String info()
    {
        return "name:"+name+"\nage:"+age+"\nZC:"+zc;
    }
}
public class Clas1 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
         teacher t=new teacher();
         t.per(19, "TOM");
         t.teach("高级工程师");
         System.out.println(t.info());
    }

}
搜索更多相关的解决方案: teacher  private  person  public  return  

----------------解决方案--------------------------------------------------------
新手,我也在等解释
----------------解决方案--------------------------------------------------------
t.per(19, "TOM");是给父类私有成员赋值。
teach(String zc)中per()方法也是给父类私有成员赋值,并且用子类私有成员的默认值,所以父类成员中的值又变成了子类成员的默认值,相当于丢失了上一行的命令。
t.info方法输出的都是子类的成员值,他们只有zc赋值过。

子类的成员与父类中同名的成员是不同,互相独立。
----------------解决方案--------------------------------------------------------
是啊,好诡异,这是为什么呢?求高人解释
----------------解决方案--------------------------------------------------------
父类中有 age name属性, 子类中也有age name, 子类继承父类那么 子类拥有自己的age name和父类的age name
理解上面那么就非常好解释了,
t.per(19, "TOM"); 这个是使用了父类的per方法,给父类的age name赋值
t.teach("高级工程师");这个方法中有 一个super.per(age, name); 这个也是给父类的age name赋值
因为子类中的age name都是空的 所以就赋值了默认值
t.info()中输出的值都是子类的值 而子类的值 从来都没有变化过(都是默认值)
输出的当然不对


----------------解决方案--------------------------------------------------------
就像楼上说的,子类有自己的name和age值,打印的都是子类的值,而你传值的时候,name和age值是传给了父类。
其实不知道你编写这个程序的意义是什么,只要稍作改动就可以输出三个值,但是不是违背了你编程序的最初意愿,俺就不知道了:
class person
{
    public int age;
    public String name;
    public void per(int age,String name)
    {
        this.age=age;
        this.name=name;
    }
    public String info()
    {
        return "name:"+name+"\nage:"+age;
    }
}
class teacher extends person
{
     private String zc;
     //private int age;
     //private String name;
    public void teach(String zc)
    {
      
        super.per(age, name);
          this.zc=zc;
        // TODO 自动生成的构造函数存根
    }
    public String info()
    {
        return "name:"+name+"\nage:"+age+"\nZC:"+zc;
    }
}
public class Class1 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
         teacher t=new teacher();
         t.per(19, "TOM");
         t.teach("高级工程师");
         System.out.println(t.info());
    }

}
----------------解决方案--------------------------------------------------------
哎呀,域有点特殊啊
我刚试了下,就算用子类里的方法给域赋值,再检查父类域的值,发现不管怎样都赋给父类的域了。。,private限制也不管用
求高人讲解下域的继承是什么来路
----------------解决方案--------------------------------------------------------
super是给父类赋值 ,而this则是当前类
比如 super.name 因为你是private 所以不能这样用
public void per(int age,String name)
  你只能通过这个来赋值
你想给子类的age 赋值就用this
public void teach(String zc,int age)
在其中加上this.age = age ;

----------------解决方案--------------------------------------------------------
  相关解决方案