黑马程序员技术交流社区

标题: 一个简单的问题 [打印本页]

作者: up淡然    时间: 2015-6-8 12:22
标题: 一个简单的问题
在看毕老师的基础视频时,他在进行hashcode或equals方法比较时,总是用对象.getName().compareTo(p.name)。我的问题是,对象p的name属性是private的怎么能通过对象名加点的方式调用呢?
作者: 存在感很差    时间: 2015-6-8 13:00
还没看到那里:'(
作者: Smile小思    时间: 2015-6-8 15:57
这个是运用了封装的知识点,所谓封装 其实就是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。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的对象属性进行调用和修改
作者: Smile小思    时间: 2015-6-8 16:01
抱歉,我可能理解错了楼主的问题了,楼主是在纠结p.name吗?那这个方法你看下是不是写在p这个对象的本类中,如果是在本类中是可以直接p.name,调用的,毕竟private是私有,别的类不能调用,本类还是可以随便调用的
不知道楼主是这个意思不。。。
作者: up淡然    时间: 2015-6-8 19:26
存在感很差 发表于 2015-6-8 13:00
还没看到那里

加油吧,我是有些基础,所以看得比较快
作者: up淡然    时间: 2015-6-8 19:28
Smile小思 发表于 2015-6-8 16:01
抱歉,我可能理解错了楼主的问题了,楼主是在纠结p.name吗?那这个方法你看下是不是写在p这个对象的本类中 ...

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

学习了,不过还是不是很懂这方面的代码
作者: SouthKai    时间: 2015-6-8 21:57
看的好快啊!
作者: 银哥    时间: 2015-6-8 23:08
调用方法访问  视频里应该有讲
作者: twinsnan    时间: 2015-6-8 23:10
看的好快,我才刚刚开始
作者: 灰色水晶梦    时间: 2015-6-8 23:44
在自己的类中调用自己的成员变量是可以的。
作者: 安逸小弟    时间: 2015-6-8 23:52
应该是name私有了 但是留了一个对外调用的方法
作者: 武汉小菜鸟    时间: 2015-6-9 00:00
想想private的访问权限,只能在本类中被调用,对吧,p.name是写在class Person{}里面的,所以可以访问的,定义set,getName()是提供了外部访问属性的方法
作者: 嘎路的米    时间: 2015-6-9 08:44
我之间也是想过这个问题,明明是不同对象,但是却可以使用类中的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. }
复制代码

作者: up淡然    时间: 2015-6-9 18:47
嘎路的米 发表于 2015-6-9 08:44
我之间也是想过这个问题,明明是不同对象,但是却可以使用类中的private的成员。
我现在认为,只要是在同一 ...

一个类内是可以访问的,但是对象p是作为参数传进来的,
作者: 开弓没有回头箭    时间: 2015-6-9 22:38
因为p是一个本类对象,所以可以在本类中调用私有成员




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