黑马程序员技术交流社区

标题: 权限问题,private get set [打印本页]

作者: 高正新    时间: 2012-10-9 11:39
标题: 权限问题,private get set
本帖最后由 水木桶 于 2012-10-9 17:11 编辑
  1. public class Person {
  2.     private String name;
  3.    
  4.     //get set 方法
  5.     public String getName() {
  6.         return name;
  7.     }

  8.     public void setName(String name) {
  9.         this.name = name;
  10.     }
  11.    
  12.     public void kill(Person p){
  13.         System.out.println(this.name + "和 "+ p.getName());//此处的p.getName()为什么写成p.name一样可以运行?
  14.     }
  15. }
复制代码
  1. public class Pkillp {

  2.     /**
  3.      * @param args
  4.      */
  5.     public static void main(String[] args) {
  6.         Person p1 = new Person();
  7.         Person p2 = new Person();
  8.         
  9.         p1.setName("小明");
  10.         p2.setName("小王");
  11.         
  12.         p1.kill(p2);
  13.     }

  14. }
复制代码
问题如文中注释的那块

  1. System.out.println(this.name + "和 "+ p.getName());//此处的p.getName()为什么写成p.name一样可以运行?
复制代码

作者: 葬天    时间: 2012-10-9 11:46
类内部可以使用任何权限的成员变量,
访问限定符 所限定的是 包,继承关系
作者: 唐增友    时间: 2012-10-9 11:49
本帖最后由 唐增友 于 2012-10-9 11:52 编辑

好像可以,楼上正解

作者: 李兆宁    时间: 2012-10-9 11:51
那是在类内部定义的方法,可以调用私有属性

如果是第二块代码的,10,11两行改了就不行了,只能通过get set方法获取设置属性。不能直接使用了
作者: qhasilver    时间: 2012-10-9 11:56
private 访问权限是对外部类做限制,内部方法当然可以调用全局变量里的属性值。
作者: 刘伟平    时间: 2012-10-9 12:12
在Person类中,定义的private name 变量的访问范围就是整个Person类,kill方法的形参为Person p,里面的this.name实际就是p.name,this指的就是Person p所指向的对象。
作者: 王震阳老师    时间: 2012-10-9 12:53
因为private的访问权限为该类内部。因此上面可以直接访问。
作者: 高正新    时间: 2012-10-9 14:44
new Person(); new 出来的两个对象 p1、p2.
p1.kill(p2)这句话调用
public void kill(Person p){
        System.out.println(this.name + "和 "+ p.getName());
}
这个方法,p.getName()得到的是p2的name。
但是p2的name已经被私有化了,为什么还可以通过p.name得到它的name?

就是不明白,难到同一个Person() 创建的 p1 p2 两个对象之间可以互相直接访问私有化成员?
作者: 胡斌    时间: 2012-10-9 16:22
因为你的方法是公有的,并且和你的成员变量在同一个类中。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2