关于java类的封装性的一点看法

观察以下代码:
package cr.tdtx.banjin.classtest;
class People {
    String name;// 表示人的姓名
    int age;    //表示人的年龄
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
    
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.name = "张三";
        p.age = -30;
        p.tell();
    }
} 


   如果现在的年龄为负数,并不会影响程序的执行,但是从实际的生活角度来讲,没有一个人的年龄是-30岁,所以这样的数据就不应该设置上去。 
    因为现在类中的所有操作都是对外部可见的,可以直接访问的,此时就可以通过封装性来解决此问题。在java中封装有很多的体现,但是最简单的体现就是加入“private”关键字。
封装属性:private 数据类型 属性名称 =  默认值;
封装方法:private 返回值类型void 方法名称(参数列表);
 下面按照此操作将类中的属性进行封装。
package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年龄
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
    
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.name = "张三";
        p.age = -30;
        p.tell();
    }
} 


提示出错:

    提示出错,证明现在的属性是安全的,可以自己保护了。但是,却无法进行操作了。

    此时给了一个重要的概念:只要属性就必须封装,被封装的属性通过setter及getter方法设置和取得,例如:name属性,setter:setName(),getter:getName()

package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年龄
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        age =a;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.setName("张三");
        p.setAge(-30);
        p.tell();
    }
} 



此时,已经可以访问类中的name和age属性,是通过间接的方式完成,但是此时并没有对输入的内容进行检查。就要在setAge里面加入限制条件
public void setAge(int a){
        if(a>=0&&a<200){
            age =a;    
        }
    } 



在访问本类中其他方法的时候,为了保证此方法是本类中定义的,可以在方法前加上this关键字:
this.方法()-->调用本类方法
package cr.tdtx.banjin.classtest;
class People {
    private String name;// 表示人的姓名
    private int age;    //表示人的年龄
    public void tell(){
        System.out.println("姓名:"+this.getName()+",年龄:"+this.getAge());
    }
    public void setName(String n){
        name = n;
    }
    public void setAge(int a){
        if(a>=0&&a<200){
            age =a;    
        }
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
}
public class ClassTest3{
    public static void main(String[] args){
        People p = new People();
        p.setName("张三");
        p.setAge(-30);
        p.tell();
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值