java中的小疑惑

kfq13961973218 2019-08-17 09:57:28
/*
疑问1:类的封装过程中关于私有变量的this引用问题?
在构造函数中:this代表当前正在创建的对象;在普通函数中:this代表当前正在调用该方法的对象。this可看成是对象。
在构造函数中this.name = name 中成员变量name是private,怎么可以用对象名去访问私有成员?
在普通函数中String strinf =this.name + ":" + this.age; 其中的name和age都是私有变量,怎么可以
用调用GetInfor()方法的对象名去访问私有变量?

疑问2:类继承过程中,普通函数的调用问题?
类的继承过程中,子类也继承了父类的非静态普通成员函数,在父类Human和子类Student中都有GetInfor()方法,
创建对象st1后,调用st1.GetInfor(),是调用Human中的GetInfor(),还是调用Student中的GetInfor()?
*/
class Human
{
private String name;
private int age;

public Human()
{

}
public Human(String name, int age)
{
this.name = name;
this.age = age;
}
public String GetInfor()
{
String strinf =this.name + ":" + this.age;
return strinf;
}

}

class Student extends Human
{
private String school;

public Student()
{

}
public Student(String name, int age, String school)
{
//this.name = name;//error 私有成员不能继承
//this.age = age;//error 私有成员不能继承
super(name, age);
this.school = school;
}
public String GetInfor()
{
//String strinf = name + ":"+ age + ":" + school;//error 子类不能继承父类的私有成员
String strinf =super.GetInfor() + ":" + this.school;//用super调用父类的普通方法
return strinf;
}
}
class TestSuper_2
{
public static void main(String[] args)
{
Student st1 = new Student("张三", 12, "北大");
System.out.printf("%s\n", st1.GetInfor());
}
}
...全文
171 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小程序猿之路 2019-08-21
  • 打赏
  • 举报
回复
顶6楼,问题1 私有变量能在本类的代码块中调用 GetInfor() 定义在类human中,调用方法的对象也是human的实例,所以可以直接访问私有 在举个例子,在human类中追加一个方法 class Human{ ........... public void show_private_name(Human one_human){ System.out.println(one_human.name); // 依然可以访问one_human 的私有name Human another_human = new Human("张三",12); System.out.println(another_human.name); // 打印张三, 可以访问私有 System.out.println(this.name); // 打印调用此方法的human的name } }
qq_39936465 2019-08-19
  • 打赏
  • 举报
回复
引用 楼主 kfq13961973218 的回复:
/* 疑问1:类的封装过程中关于私有变量的this引用问题? 在构造函数中:this代表当前正在创建的对象;在普通函数中:this代表当前正在调用该方法的对象。this可看成是对象。 在构造函数中this.name = name 中成员变量name是private,怎么可以用对象名去访问私有成员? 在普通函数中String strinf =this.name + ":" + this.age; 其中的name和age都是私有变量,怎么可以 用调用GetInfor()方法的对象名去访问私有变量? 疑问2:类继承过程中,普通函数的调用问题? 类的继承过程中,子类也继承了父类的非静态普通成员函数,在父类Human和子类Student中都有GetInfor()方法, 创建对象st1后,调用st1.GetInfor(),是调用Human中的GetInfor(),还是调用Student中的GetInfor()? */
1.this 表示当前对象,这里的当前对象都是该类的实例,类实例当然可以调用本类的私有成员。 2.重写后的方法,都是指向子类的方法,父类方法被隐藏不可见。
编程写手 2019-08-19
  • 打赏
  • 举报
回复
私有的可以在本类中被访问,你都创建了学生变量,肯定调用学生类中的方法
kfq13961973218 2019-08-19
  • 打赏
  • 举报
回复
问题2终于弄明白了: Student 类继承了父类 Human类,当然也继承了父类GetInfor()的方法,但在子类中进行了重写(子类中重新定义了父类中已有的函数),这时候 Student 类中仅有重写后的一个函数,而不包括父类的GetInfor()函数,所以Student类对象调用的是重写后的函数。
weixin_40290083 2019-08-19
  • 打赏
  • 举报
回复
问题1:要构造中this.name = name 其中“=”前面的是成员变量,“=”后面的是形参变量,也是局部变量。相互的访问权根看看这个: https://blog.csdn.net/qq_33418887/article/details/80508173
xharvard 2019-08-18
  • 打赏
  • 举报
回复
第一个问题尝试回答一下。 public Student(String name, int age, String school) { //this.name = name;//error 私有成员不能继承 //this.age = age;//error 私有成员不能继承 super(name, age); } 这时候的this指向的是Student对象,当然无权方位Human内部的name和age了。 只有Human内部的this才是指向Human对象的,也就是可以访问name和age了。
xharvard 2019-08-18
  • 打赏
  • 举报
回复
回答第二个问题: Student st1 = new Student("张三", 12, "北大"); st1是Student的引用,当然调用Student的GetInfor() 如果 Human st1 = new Student("张三", 12, "北大"); 那st1就调用Human的GetInfor()

62,614

社区成员

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

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