Java新手求解答

Andrew_2015_3 2015-03-12 03:08:37
背景:在跟着视频学习类的继承和函数重写:代码如下
class Person{
private String name;
private int age;
public void setName(String name){
this.name= name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getInfo(){
return "name:"+name+"\n"+"age:"+age;
}
}

class Student extends Person{
private String school;
public String getSchool(){
return school;
}
public void setSchool(String school){
this.school = school;
}
public String getInfo(){
return "name:"+name+"\n"+"age:"+age+"\n"+"school"+school;
}
}

public class TestPerson{
public static void main(String[] args){
Student student = new Student();
Person person = new Person();
person.setName("none");
person.setAge(11);
student.setName("jolin");
student.setAge(21);
student.setSchool("SCH");
System.out.println(person.getInfo());
System.out.println(student.getInfo());
System.out.println(student.getSchool());
}
}

根据对比 我发现要将30行的name 改成getName,age改成getAge代码可以成功编译
问题1 :与17行对比 我就很疑惑。既然是继承就包括继承了成员变量name和age 为什么这里就不可以直接调用了?
问题2 : 还有我试了下如果把30行的name 改成student.name 还是不行
同样的改成this.name还是出错。
这里问题比较杂 求大神解答
...全文
208 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2015-03-13
  • 打赏
  • 举报
回复
父类的private成员和方法,子类可以直接访问吗?答案是不能。
天空趋虚 2015-03-13
  • 打赏
  • 举报
回复
private 私有的,不可继承。 public 公共的,可继承。 protected 受保护的,可继承。
yongbuyanqi88888 2015-03-13
  • 打赏
  • 举报
回复
根据对比 我发现要将30行的name 改成getName,age改成getAge代码可以成功编译 问题1 :与17行对比 我就很疑惑。既然是继承就包括继承了成员变量name和age 为什么这里就不可以直接调用了? 问题2 : 还有我试了下如果把30行的name 改成student.name 还是不行 同样的改成this.name还是出错。 解析:1)类的私有属性只归其本身所有,其他类访问该属性只能通过该类对外提供的方法访问 --类的封装特性 2)有我试了下如果把30行的name 改成student.name 还是不行 --student 哪来的 建议把抽象和类的封装、继承、多态特性好好理解 ,多练,多分析就好,动手之前多看看书上的分析
syksy0904 2015-03-12
  • 打赏
  • 举报
回复
4楼说的对,这两个属性是父类私有的属性,子类无法直接访问,只能通过get set方法来访问。 同时,不止是子类无法访问,其他任何一个类都不能直接访问另一个类的私有属性。
baidu_26514375 2015-03-12
  • 打赏
  • 举报
回复
私有就是私有,虽然student里面有父类的所有属性,但就是没有权限访问。 你可以用protected范围。
Foxir 2015-03-12
  • 打赏
  • 举报
回复
引用 1 楼 u010779899 的回复:
因为name和age是私有的(private)
理论上是不可以的。 私有就是私有,虽然student里面有父类的所有属性,但就是没有权限访问。 你可以用protected范围。
Andrew_2015_3 2015-03-12
  • 打赏
  • 举报
回复
是私有。但是student继承了person。所以student里也应该有name 和age。所以调用应该理论上还是可以的。难道是name计算机不识别是student还是person的?那我加了个student.name还是识别不了?
DokiSakiKurumi 2015-03-12
  • 打赏
  • 举报
回复
因为name和age是私有的(private)

62,615

社区成员

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

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