标题:JAVA类继承出现一点小问题,求高手帮忙!
只看楼主
dengdaisky
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2010-4-11
结帖率:54.55%
已结贴  问题点数:10 回复次数:7 
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 
2013-07-18 19:36
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
得分:2 
新手,我也在等解释

思考赐予新生,时间在于定义
2013-07-19 02:29
sj8339
Rank: 1
等 级:新手上路
帖 子:1
专家分:2
注 册:2013-7-14
得分:2 
t.per(19, "TOM");是给父类私有成员赋值。
teach(String zc)中per()方法也是给父类私有成员赋值,并且用子类私有成员的默认值,所以父类成员中的值又变成了子类成员的默认值,相当于丢失了上一行的命令。
t.info方法输出的都是子类的成员值,他们只有zc赋值过。

子类的成员与父类中同名的成员是不同,互相独立。
2013-07-19 07:29
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
得分:0 
是啊,好诡异,这是为什么呢?求高人解释
2013-07-19 09:56
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:2 
父类中有 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()中输出的值都是子类的值 而子类的值 从来都没有变化过(都是默认值)
输出的当然不对

2013-07-19 10:21
davidfly
Rank: 2
来 自:内蒙古
等 级:论坛游民
帖 子:20
专家分:21
注 册:2011-7-4
得分:2 
就像楼上说的,子类有自己的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());
    }

}
2013-07-19 13:15
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
得分:2 
哎呀,域有点特殊啊
我刚试了下,就算用子类里的方法给域赋值,再检查父类域的值,发现不管怎样都赋给父类的域了。。,private限制也不管用
求高人讲解下域的继承是什么来路
2013-07-19 21:48
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:0 
super是给父类赋值 ,而this则是当前类
比如 super.name 因为你是private 所以不能这样用
 public void per(int age,String name)
  你只能通过这个来赋值
你想给子类的age 赋值就用this
 public void teach(String zc,int age)
在其中加上this.age = age ;
2013-07-20 00:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-417581-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.149130 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved