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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up淡然 中级黑马   /  2015-6-8 12:22  /  697 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在看毕老师的基础视频时,他在进行hashcode或equals方法比较时,总是用对象.getName().compareTo(p.name)。我的问题是,对象p的name属性是private的怎么能通过对象名加点的方式调用呢?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

16 个回复

倒序浏览
还没看到那里:'(
回复 使用道具 举报
这个是运用了封装的知识点,所谓封装 其实就是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。name的属性是private,所以对外是无法直接对name进行调用了,这就是隐藏属性了,但是变量定义就肯定是有意义的,是需要被调用的,那么为了方便使用,所以通常在定义类的时候,会编写get()和set()方法,通过这个方法就可以对私有的变量进行调用和修改了,这就是所谓的公共访问方式,举例如下
public class Person {
        private String name;
        private int age;
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }       
}
通过编写对应的getName()和setName(),就可以实现在其他的类中对Person的对象属性进行调用和修改
回复 使用道具 举报
抱歉,我可能理解错了楼主的问题了,楼主是在纠结p.name吗?那这个方法你看下是不是写在p这个对象的本类中,如果是在本类中是可以直接p.name,调用的,毕竟private是私有,别的类不能调用,本类还是可以随便调用的
不知道楼主是这个意思不。。。
回复 使用道具 举报

加油吧,我是有些基础,所以看得比较快
回复 使用道具 举报
Smile小思 发表于 2015-6-8 16:01
抱歉,我可能理解错了楼主的问题了,楼主是在纠结p.name吗?那这个方法你看下是不是写在p这个对象的本类中 ...

对象P是传入的参数,搞不懂了
回复 使用道具 举报
name是一个私有对象,getName是一个共有方法,那么首先,调用getName()是成立的,我没说错吧,其次,本类中的方法是可以调用本类的数据的,无论是否私有,此外,你可以了解一下单例设计模式,就完全是按照这个思路来扩展的一种设计模式
回复 使用道具 举报
mishisanyi 发表于 2015-6-8 20:16
name是一个私有对象,getName是一个共有方法,那么首先,调用getName()是成立的,我没说错吧,其次,本类中 ...

学习了,不过还是不是很懂这方面的代码
回复 使用道具 举报
看的好快啊!
回复 使用道具 举报
调用方法访问  视频里应该有讲
回复 使用道具 举报
看的好快,我才刚刚开始
回复 使用道具 举报
在自己的类中调用自己的成员变量是可以的。
回复 使用道具 举报
应该是name私有了 但是留了一个对外调用的方法
回复 使用道具 举报
想想private的访问权限,只能在本类中被调用,对吧,p.name是写在class Person{}里面的,所以可以访问的,定义set,getName()是提供了外部访问属性的方法
回复 使用道具 举报
我之间也是想过这个问题,明明是不同对象,但是却可以使用类中的private的成员。
我现在认为,只要是在同一个类中就可以访问吧。在类中的private成员只是不给其他类看见而已。
在本类中是可以访问的。这是我的个人见解。

用来测试的代码如下:

  1. class A {
  2.         private String name = "zhangsan";

  3.         public void show(A a) {
  4.                 name.compareTo(a.name);//都是在本类中,本类中的name是不隐藏的。只要是A的对象都属于本类,所以可以使用
  5.         }
  6. }

  7. public class Demo {
  8.         private static String name = "lisi";

  9.         public static void main(String[] args) {
  10.                 A a1 = new A();
  11.                 A a2 = new A();
  12.         }

  13.         public static void show(A a) {
  14.                 // name.compareTo(a.name);//这里不能执行,因为A类中的private成员对Demo类是隐藏的
  15.         }
  16. }
复制代码
回复 使用道具 举报
嘎路的米 发表于 2015-6-9 08:44
我之间也是想过这个问题,明明是不同对象,但是却可以使用类中的private的成员。
我现在认为,只要是在同一 ...

一个类内是可以访问的,但是对象p是作为参数传进来的,
回复 使用道具 举报
因为p是一个本类对象,所以可以在本类中调用私有成员
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马