私有成员变量怎么把他引入子类的方法中

handsomezhj 2009-11-20 10:15:14
class Person4{
private String name ;
private int age ;

Person4(String name) {
this.name = name;
age = 21;
}
Person4(String name, int age) {
this.name = name;
this.age = age ;
}

public String toString() {
return name;}
public int getAge() {
return age;}
public String getName() {
return name ;}
public boolean equals(Object obj) {
if(obj == null) {return false;}
else
if(obj instanceof Person4) {
Person4 p = (Person4)obj;
if(p.name == this.name&&p.age == this.age) {
return true;
}
}
return false;
}

public String info() {
return "name :" +name + "\n"+"age :" + age ;}
}



class Student4 extends Person4 {
private String school ;
Student4(String name, String school) {
super(name);
this.school = school;
}
Student4(String name , int age ,String school) {
super("zhang",23);
this.school = school;
}


public boolean equals(Object obj) {
if(obj == null) {return false;}
else
if(obj instanceof Student4) {
Student4 s = (Student4)obj ;
if(s.name == this.name&&s.age == this.age&&s.school == this.school) {
return true;
}
}
return false;
}
public String toString() {
return school;
}

public String info() {
return super.info() + "\n" + "school : " + school ;
}
}




public class TestET {
public static void main(String args[]) {
Person4 p1 = new Person4("zhang");
Person4 p2 = new Person4("jian",39);
Student4 s1 = new Student4("kang","DC");
Student4 s2 = new Student4("hui",20,"AB");
System.out.println(p1.equals(p2));
System.out.println(s1.equals(s2));
System.out.println(p1.info());
System.out.println(p2.info());
System.out.println(s1.info());
System.out.println(s2.info());
}
}
如红色部分的引用?怎么把私有成员变量引入????要重新在Person4类中加入get方法么???高手指点下
...全文
174 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
handsomezhj 2009-11-20
  • 打赏
  • 举报
回复
4楼的答案不行啊 school 怎么办????
libo_java 2009-11-20
  • 打赏
  • 举报
回复
有两种方式:
1.给父类private成员变量设置访问器方法。
2.通过java反射机制是可以访问到私有成员的。
zhouyongyang 2009-11-20
  • 打赏
  • 举报
回复
public boolean equals(Object obj) {
if(obj == null) {return false;}
else
if(obj instanceof Student4) {
Person4 s = (Person4)obj ; //把这行改成向上转形就好了,,,,
if(s.name == this.name&&s.age == this.age&&s.school == this.school) {
return true;
}
}
return false;
}
zhuzhusany 2009-11-20
  • 打赏
  • 举报
回复
既然是私有的成员,继承也是不能直接访问的,当然该实例的方法是可以的(一般就是get/set方法)
反射除外
ydm305365 2009-11-20
  • 打赏
  • 举报
回复
我感觉应该需要加入get方法...你属性设为私有,如果不加入get方法...那么出本类外...任何其他类都无法使用..当然用反射除外
justinavril 2009-11-20
  • 打赏
  • 举报
回复
通过父类的实例肯定是可以的啊
云上飞翔 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 handsomezhj 的回复:]
class Person4{
private String name ;
private int  age ;
Person4(String name) {
this.name = name;
age = 21;
}
Person4(String name, int age) {
this.name = name;
this.age = age  ;
}

public String toString() {
return name;}
public int getAge() {
return age;}
public String getName() {
return name ;}
public boolean equals(Object obj) {
if(obj == null) {return false;}
else
if(obj instanceof Person4) {
Person4 p = (Person4)obj;
if(p.name == this.name&&p.age == this.age) {
return true;
}
}
return false;
}

public String info() {
return "name :" +name + "\n"+"age :" + age  ;}
}


class Student4 extends Person4 {
private String school ;
Student4(String name, String school) {
super(name);
this.school = school;
}
Student4(String name , int age ,String school) {
super("zhang",23);
this.school = school;
}


public boolean equals(Object obj) {
if(obj == null) {return false;}
else
if(obj instanceof Student4) {
Student4 s = (Student4)obj ;
if(s.name == this.name&&s.age == this.age&&s.school == this.school) {
return true;
}
}
return false;
} public String toString() {
return school;
}

public String info() {
return super.info() + "\n" + "school : " + school ;
}
}


public class TestET {
public static void main(String args[]) {
Person4 p1 = new Person4("zhang");
Person4 p2 = new Person4("jian",39);
Student4 s1 = new Student4("kang","DC");
Student4 s2 = new Student4("hui",20,"AB");
System.out.println(p1.equals(p2));
System.out.println(s1.equals(s2));
System.out.println(p1.info());
System.out.println(p2.info());
System.out.println(s1.info());
System.out.println(s2.info());
}
}
如红色部分的引用?怎么把私有成员变量引入????要重新在Person4类中加入get方法么???高手指点下
[/Quote]

方法之一:加getXXX()来向外提供private型数据。
不过,从你的设计意图来看,由于name与age子类是要继承的,因此:更好的能表达意图的应该将private改为protected,让子类能继承下去。那个private的school也建议改为:protected。
wangsj 2009-11-20
  • 打赏
  • 举报
回复
别无他法了,就写个共有方法来获得私有成员的值吧
jlh2 2009-11-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 libo_java 的回复:]
有两种方式:
1.给父类private成员变量设置访问器方法。
2.通过java反射机制是可以访问到私有成员的。
[/Quote]
amdgaming 2009-11-20
  • 打赏
  • 举报
回复
get set 访问
这就是 javabean规范。。呵呵
hbgzg3006 2009-11-20
  • 打赏
  • 举报
回复
都设置为私有的了,其他的怎么都直接访问不到。可以考虑加一个方法,public String getPrivate(){
return this.name;
}
或者是加一个static的public方法

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧