黑马程序员技术交流社区

标题: 请教关于private的用法 [打印本页]

作者: 包晗    时间: 2012-5-19 11:13
标题: 请教关于private的用法
本帖最后由 包晗 于 2012-5-19 11:40 编辑

问题
(1)在类里  private 只对单行有效 还是对整个类有效?

(2)第5天07的视频例子中,有个
class Person
{
private int age;
public void setAge(int a)
{
     age=a;
}
public int getAge()             //请问这个即使不加也能运行成功,这句是啥意思,必须加吗???
{
    return age;
}
void speak()
{
    System.out.println("age="+age);
}
}
class Personbao
{
public static void main(String[] args)
{
  Person o = new Person();
  o.setAge(21);
o.speak();     
   }
}
大家去掉
public int getAge()            
{
    return age;
}
程序也是输出 21
作者: 于陈    时间: 2012-5-19 11:19
private私有的,修饰变量表示私有变量,表示这个变量的访问范围只有本类,你只需要当前的这个类里面访问的的话,那么加不加set()和get()方法那都是没影响的,在本类里面可以直接使用。
但是如果这个变量要在其他的类里面使用,那么就需要set()和get()方法了,在其他的类里面要设置该变量的值或者得到该变量的值,就要通过创建该类的对象,然后调用set()和get()方法来实现。
作者: 包晗    时间: 2012-5-19 11:23
于陈 发表于 2012-5-19 11:19
private私有的,修饰变量表示私有变量,表示这个变量的访问范围只有本类,你只需要当前的这个类里面访问的 ...

在其他类里使用 把get去掉 调用set()已经能够使程序运行成功...觉得get()是多余的部分  想知道get的作用
作者: 杨康    时间: 2012-5-19 11:24
因为你添加了权限限制,其他函数想读取的时候就会无法读取,这时候你要对外界显示出一个能够读取被限制的成员的方法,这应该就等于把大门锁上了,但是留了一扇小门来给其他想调用该成员的函数使用。个人理解,不知道对不对。
作者: 郭振    时间: 2012-5-19 11:26
兄弟你的问题说的不是清楚。private可以修饰变量、构造器,方法、内部类;在变量前面加private 表示类的私有属性,只可以在类内部访问使用;
public int getAge()    因为你把变量私有化了,外界是访问不到的,如果想让外界访问的话只能public int getAge() ,同过此方法外界只能访问该方法的返回值
作者: 于陈    时间: 2012-5-19 11:32
set和het都是public的方法,这样我们就能在类外面修改,访问私有变量了~
setAge()是带参的方法,age=a;就是把你传进来的参数a赋值给age。setAge()的作用就是给这个变量赋值;
getAge()  return age;就是返回age的值,也就是取得age的值,当你在别的类里面要得到age的值的时候就用getAge();
比如你实例化 person p1=new Person();
p1.getAge();
就取得age的值了~
你用eclipse的时候应该很有体会啊~如果私有变量不添加set和get方法的话,会有警告的...我的习惯是一般就直接让eclipse直接生成他们的set和get方法...
作者: 陌花╮有意、    时间: 2012-5-19 11:33
private int age;
这个表示 age为该类私有属性 要是不提供公共方法  外界不能够访问
public int getAge() {}
表示该方法为公有  能提供外界访问 那么其他类就可以通过该方法访问到age属性的值
作者: 梁小波    时间: 2012-5-19 11:33
你的意思是没有public也可以运行?是的在这里面不加会默认限定,在该包中均可访问。也就是说没有public,在外包就不能访问getage()了。
有public则可以访问。
你说private 只对单行有效 还是对整个类有效?你的意思是是否下一个变量不加限定符,就是private了吗?不是,如果没有限定符就是默认限定,在该包中均可访问!

作者: 8161776    时间: 2012-5-19 11:34
private是私有的意思,用private修饰的属性在别的类里面是不能直接使用的,你必须提供public的set和get方法,
作者: 黑马张健    时间: 2012-5-19 12:25
private是表示修饰一个私有变量或着类。它所代表的权限就是只能在本类内访问。
用private去修饰一个属性时,这个属性只能在本类内使用。 如果其他的外表类想要调用这个私有化的属性,就必须要用到咱们所过的面向对象的一个特点:封装。
什么是封装呢?封装就是指隐藏了对象的属性和实现细节,仅对外提供公共的访问方式。
用pirvate修饰符,只是隐藏了对象的属性,set和get方法提供了这个属性的对外访问方式。
通常情况下,一般一个类的属性都需要提供set和get方法供外部去访问。
内部类访问,可以用对this.属性
外表类访问,可以用对象名.get   或对象名.set方法
作者: 凡延海    时间: 2012-5-19 12:44
关键字如private、public一般都是用在修饰类成员变量和成员方法。private修饰的成员变量和方法呢都是只能在自己类中才可以被访问到。如果你在外部类中创建了Person类实例perosn,要访问成员变量age,则是不能被访问的,person.age在编译的时候没有问题,但是在运行的时候就会报错。这就需要提供public的set和get方法来访问age成员变量了,给age赋值和返回age的值,来供外边类调用。不知楼主是否满意,呵呵。
作者: 彩虹    时间: 2012-5-19 12:59
(1)private是定义整个类中的私有成员,它的作用域为整个类
你定义了以下两个方法
public int getAge()             //请问这个即使不加也能运行成功,这句是啥意思,必须加吗???
{
    return age;
}
void speak()
{
    System.out.println("age="+age);
}
你的主函数是这么写的
public static void main(String[] args)
{
  Person o = new Person();
  o.setAge(21);
  o.speak();     
}
当执行完o.setAge(21);这句,age的值就变为了21,接下来你调用o.speak(),直接打印出age=21;你根本没有调用getAge()方法,所以这个方法可要可不要,结果都能打印出21
getAge()方法的作用就是返回改变后的age值,你可以用以下方式调用它,得到结果为21
在主函数中加上System.out.println("age="+o.getAge());这句
作者: 付左军    时间: 2012-5-19 13:10
class Person
{
private int age;
public void setAge(int a)
{
     age=a;
}
public int getAge()             //请问这个即使不加也能运行成功,这句是啥意思,必须加吗???这句的意思是当你调用到getAge方法是会返回一个值,

{
    return age;
}
void speak()
{
    System.out.println("age="+age);
}
}
class Personbao
{
public static void main(String[] args)
{
  Person o = new Person();
  o.setAge(21);
o.speak();     
   }
}
大家去掉
public int getAge()            
{
    return age;
}
程序也是输出 21,之所以输出21是应为你调用了setAge方法,设置了21
作者: 陈栋    时间: 2012-5-19 16:34
private修饰的变量时私有变量是针对外部类来说的的,在本类中通过对象可以随处访问,像你上边说的情况getAge方法没有调用要不要均可以,但是你的程序输出了21,因为你通过对象调用了speak方法在对象的speak方法中你使用syso语句输出了age的值,此处speak方法和age属于同一对象内部成员,所以不影响
作者: 陆强强    时间: 2012-6-25 11:35
包晗 发表于 2012-5-19 11:23
在其他类里使用 把get去掉 调用set()已经能够使程序运行成功...觉得get()是多余的部分  想知道get的作用 ...

因为speak方法和age在一个类里,所以可以直接打印。但如果要给几个对象的age排序就不行了,你必须调用getage 方法
作者: 邵佳婧jvod    时间: 2012-11-2 21:31
http://i.mtime.com/nuoshal/
http://i.mtime.com/zhiweizhiwei
http://i.mtime.com/zhiyuanla/
http://i.mtime.com/goucuan/
http://i.mtime.com/congzhil/
http://i.mtime.com/zheguanw/
http://i.mtime.com/bohanji995/
http://i.mtime.com/kangdic/
http://i.mtime.com/luanzhan/
http://i.mtime.com/ducan/
http://i.mtime.com/recangu/
http://i.mtime.com/jiufe/
http://i.mtime.com/mishaju/
http://i.mtime.com/qiangmuzh
http://i.mtime.com/yanqian/
http://i.mtime.com/haicannu/
http://i.mtime.com/huizhihuai/
http://i.mtime.com/congbusha/
http://i.mtime.com/qiangy/
http://i.mtime.com/querenjiao0/
http://i.mtime.com/potaola/
http://i.mtime.com/qilangji/
http://i.mtime.com/mujiach/
http://i.mtime.com/murento/
http://i.mtime.com/gangguxing/
http://i.mtime.com/jialiangc/
http://i.mtime.com/mizhaoji/
http://i.mtime.com/badipai/
http://i.mtime.com/pangt/
http://i.mtime.com/xila607/
http://i.mtime.com/zenxiji/
http://i.mtime.com/shengoubei/
http://i.mtime.com/yongkuchu/
http://i.mtime.com/laoxind/
http://i.mtime.com/youxichu/
http://i.mtime.com/jiushao/
http://i.mtime.com/canlielie/
http://i.mtime.com/yangangl/
http://i.mtime.com/jutuy/
http://i.mtime.com/pouchen/
http://i.mtime.com/songl/
http://i.mtime.com/yancangs/
http://i.mtime.com/yongaodi/
http://i.mtime.com/songzilun/
http://i.mtime.com/jiongjia/
http://i.mtime.com/miwenggu/
http://i.mtime.com/shucuye/
http://i.mtime.com/liaochenhu/
http://i.mtime.com/shaoy/
http://i.mtime.com/jiyuela/
http://i.mtime.com/feifeiy/
http://i.mtime.com/cansh/
http://i.mtime.com/zhunben/
http://i.mtime.com/yekanlai/
http://i.mtime.com/canxita/




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