A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高正新 中级黑马   /  2012-10-9 11:39  /  2239 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 水木桶 于 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一样可以运行?
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 淡定

查看全部评分

8 个回复

倒序浏览
类内部可以使用任何权限的成员变量,
访问限定符 所限定的是 包,继承关系
回复 使用道具 举报
本帖最后由 唐增友 于 2012-10-9 11:52 编辑

好像可以,楼上正解
回复 使用道具 举报
那是在类内部定义的方法,可以调用私有属性

如果是第二块代码的,10,11两行改了就不行了,只能通过get set方法获取设置属性。不能直接使用了
回复 使用道具 举报
private 访问权限是对外部类做限制,内部方法当然可以调用全局变量里的属性值。
回复 使用道具 举报
在Person类中,定义的private name 变量的访问范围就是整个Person类,kill方法的形参为Person p,里面的this.name实际就是p.name,this指的就是Person p所指向的对象。
回复 使用道具 举报
因为private的访问权限为该类内部。因此上面可以直接访问。
回复 使用道具 举报
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:48
9#
因为你的方法是公有的,并且和你的成员变量在同一个类中。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马