黑马程序员技术交流社区

标题: 第05天-07-面向对象(封装private) [打印本页]

作者: 周志伟    时间: 2013-4-10 01:30
标题: 第05天-07-面向对象(封装private)
本帖最后由 周志伟 于 2013-4-11 03:00 编辑
  1. class Person
  2. {
  3.         private int age;

  4.         public void haha(int a)
  5.         {
  6.                 age = a;
  7.         }

  8.         void speak()
  9.         {
  10.                 System.out.println("age = " + age);
  11.         }
  12. }

  13. class PersonDemo
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 Person p = new Person();
  18.                 p.age = 20;                //当Person类里的age被private以后,main方法中的p对象就不能访问age了;
  19.                                               //那为什么Person类中的haha方法可以访问私有属性age呢?????是因为haha和age在一个类中吗??????
  20.                 p.haha(20);
  21.                 p.speak();
  22.         }
  23. }
复制代码

作者: Asan    时间: 2013-4-10 01:43
private修饰的成员变量和方法称之为私有变量和私有方法,类中限定为private的成员,只能被这个类本身访问!如果一个类的构造方法声明为private,则其他类不能生成该类的一个实例!   这是private的定义
作者: 周志伟    时间: 2013-4-10 02:32
Asan 发表于 2013-4-10 01:43
private修饰的成员变量和方法称之为私有变量和私有方法,类中限定为private的成员,只能被这个类本身访问! ...

“如果一个类的构造方法声明为private,则其他类不能生成该类的一个实例!”
这一句能再解释一下吗?谢谢啦~~~
作者: 我手心里的宝    时间: 2013-4-10 09:15
如果1个类的构造方法为private,则其他类不能生成类的对象
因为创建new一个对象时,必须调用其构造方法,如果构造方法为私有
则外部类不能访问,因而不能创建类的对象
记住:创建对象必须构造方法不是私有
要不然,外部不能访问因而不能创建
建议你看看毕老师讲的new Person()都做了哪些事的视频
作者: 余善航    时间: 2013-4-10 09:19
private 修饰成员变量,那么这个变量只在本类中可以直接访问,而外界需要调用该类提供访问的方法来访问
作者: 丘凤光    时间: 2013-4-10 09:23
外部类的方法就不能访问private修饰的本类方法和属性,但是本类中的方法可以使用private修饰的本类的属性。这就是Java三大特性的封装的特点
作者: 蓝色骨头    时间: 2013-4-10 19:59
被private修饰的成员变量或方法对外是不可见的,只能通过类本身公有方法访问。
隐藏类的属性或具体实现方法(通过public的方法访问隐藏的属性,或调用隐藏的方法)就是封装。
作者: 影响力147753321    时间: 2013-4-10 21:12
方法中的变量为局部变量和成员变量重名是可以的。因为其作用范围不一样。其中局部变量会覆盖成员变量。也就是说在方法中的局部变量相当于全局变量。可以对其进行任何操作,包括赋值。对象调用这个方法。为其赋值是天经地义的。因此有 p.age = 20;  。还有,最重要的是类中的私有是相当于别的类的。对自已的成员不存在私有的。
作者: 花伟昌    时间: 2013-4-10 22:19
private (私有的)权限修饰的成员,只能在本类中被访问(如果是:public 、protect或默认权限就可以访问到 ),private是java中最小的权限修饰符。p.haha(20)是通过对象来访问Person类中的成员。
作者: 、__WSD吴少东    时间: 2013-4-10 23:25
周志伟 发表于 2013-4-10 02:32
“如果一个类的构造方法声明为private,则其他类不能生成该类的一个实例!”
这一句能再解释一下吗?谢谢 ...

实例的意思就是在对内存中生成对象,当一个类被私有修饰后,该类就在主函数运行的时候加载到方法区了
可以调用,但是不能再生成一个新的,
作者: 周志伟    时间: 2013-4-10 23:48
、__WSD吴少东 发表于 2013-4-10 23:25
实例的意思就是在对内存中生成对象,当一个类被私有修饰后,该类就在主函数运行的时候加载到方法区了
可 ...

奥,知道了,谢谢哈
作者: 聂斌    时间: 2013-4-11 00:28
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

另外:私有只在本类中有效...将age私有化以后,类以外即使建立了对象也不能直接访问。但是age所在的类里面的成员可以访问这个age

你把age属性封装了,,值得注意的是封装不等于私有,,,,,私有只是封装的一种方式,,我私有化封装后外面的类是访问不到我的私有属性的,但是这个私有的属性age能被自己的类访问,,此时age是全局变量,,,那么类中的方法haha当然可以访问那个全局变量,,,全局变量时作用于自己整个类的

作者: 周志伟    时间: 2013-4-11 01:38
我手心里的宝 发表于 2013-4-10 09:15
如果1个类的构造方法为private,则其他类不能生成类的对象
因为创建new一个对象时,必须调用其构造方法,如 ...

好的,谢谢啦,请问new Person()都做了哪些事的视频是第几天的第几集?
作者: 周志伟    时间: 2013-4-11 01:38
余善航 发表于 2013-4-10 09:19
private 修饰成员变量,那么这个变量只在本类中可以直接访问,而外界需要调用该类提供访问的方法来访问 ...

知道了,谢谢啦
作者: 周志伟    时间: 2013-4-11 01:39
丘凤光 发表于 2013-4-10 09:23
外部类的方法就不能访问private修饰的本类方法和属性,但是本类中的方法可以使用private修饰的本类的属性。 ...

恩,知道了,谢谢啦
作者: 周志伟    时间: 2013-4-11 01:40
蓝色骨头 发表于 2013-4-10 19:59
被private修饰的成员变量或方法对外是不可见的,只能通过类本身公有方法访问。
隐藏类的属性或具体实现方法 ...

知道了,谢谢啦
作者: 周志伟    时间: 2013-4-11 01:41
影响力147753321 发表于 2013-4-10 21:12
方法中的变量为局部变量和成员变量重名是可以的。因为其作用范围不一样。其中局部变量会覆盖成员变量。也就 ...

奥奥,晓得了,谢谢了

作者: 周志伟    时间: 2013-4-11 01:42
花伟昌 发表于 2013-4-10 22:19
private (私有的)权限修饰的成员,只能在本类中被访问(如果是:public 、protect或默认权限就可以访问到  ...

:)谢谢啦





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