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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张鹏杰丶HM 中级黑马   /  2014-3-7 17:04  /  1873 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 czwanglei 于 2014-3-9 10:48 编辑

class Person
        {
            private int age;
            public int Age { set; get; }
            public Person(int age)
            {
                this.Age = age;

            }

        }
这是我创建的一个类  这个类中private int age; 这个是不是多余的?  还有有点弄不明白!

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 继续加油。。

查看全部评分

10 个回复

倒序浏览
class Person
         {
             private int age;
             public int Age { set; get; }//这个属性是一个自动属性 它不是封装age这个字段的,在编译的时候如果程序员写了自动属性,那么微软它会自动的生成那么一个字段 那么你这个自动属性就是封装微软自动生成的那个字段
             public Person(int age)
             {
                 this.Age = age;

             }

         }

如果你是还不太理解字段属性,这样首先说一下private是私有的访问级别,那么创建这个Person类的对象的时候,是无法访问到private所修饰的成员的,那为什么要将字段修饰成private 然后又写一个public公有的属性呢,是因为我们不想有一些非法的数值赋值给字段(比如说age,年龄不能为负数),(那么如果将字段修饰为private),那么我们怎么给字段赋值?这样就可以用到属性了,我们就可以用属性进行判断过滤,然后将一个正常符合逻辑的值赋值给字段(比如在属性的set访问器当中我们if判断(age>=0)?age=value:age=0;),将这个属性公开出来(将属性修饰为public),这样就实现了对该字段的封装.其实属性的本质就是两个方法.
希望对你有帮助啊!
回复 使用道具 举报 1 0
Darkhorse′Xa 发表于 2014-3-7 17:26
class Person
         {
             private int age;

意思就是说有需要判定的话  就得定义private是吗?  这样是方便了许多
回复 使用道具 举报
不是说需要判断就定义,只要你这个字段需要被对象外界访问,那么就可以封装这个字段写属性.
回复 使用道具 举报
public :(公共的)可以在任何地方被访问
private:私有的------只能在本类中被访问
不多余。你只要记住, private int age;中的age是用来存最后的值的,而Age是个属性,他不能存放用户的值.
回复 使用道具 举报
private  这个是封装用的   用了这个表示 你的这个属性只能在这个类内部调用。如果外部的人员想要调用,就必须通过gat()set()方法。
这样我们就能用代码控制这个私有属性的值的范围

class Person {
        private int age;

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                if(age <= 0 | age > 120) System.out.println("请输入正确的年龄");
                else this.age = age;
        }

}
public class test{
        public static void main(String[] args) {
                  Person p=new Person();
              p.setAge(-50);
                  
                  System.out.println(p.getAge());
                  
                 
        }
       
       
}
回复 使用道具 举报
上面代码的输出结果是:
请输入正确的年龄
0
回复 使用道具 举报
Monkey·D·Chas 发表于 2014-3-7 19:23
private  这个是封装用的   用了这个表示 你的这个属性只能在这个类内部调用。如果外部的人员想要调用,就 ...

明白了  谢谢  
回复 使用道具 举报
Monkey·D·Chas 发表于 2014-3-7 19:23
private  这个是封装用的   用了这个表示 你的这个属性只能在这个类内部调用。如果外部的人员想要调用,就 ...

其实你那个set和get不用分着写  一块写就行   用一个Age属性
private int age;
public int Age
{   set{this.age=value;}
      get{return;}
}
我是新手   不要意思 冒昧了
回复 使用道具 举报
私有的与公有的区别,一般字段设置私有是为了保护成员,外面调用属性,这是属性被封装在类中。
回复 使用道具 举报
public :(公共的)可以在任何地方被访问
private:私有的------只能在本类中被访问
private int age;定义为私有的话,就像当于外界不能直接访问、不能直接更改,更具有安全性,
public int Age{get{....};set{........};} 而属性就相当于是个能让外界访问私有字段的一个口,可以设置get,set,get表示外界可以通过此属性获取,set是可以通过此属性可以设置新的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马