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());
}
}
----------------解决方案--------------------------------------------------------
新手,我也在等解释
----------------解决方案--------------------------------------------------------
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 ;
----------------解决方案--------------------------------------------------------