Java面向对象之封装

通常情况下在测试类中可以给成员变量赋值一些合法但不合理的数值(如年龄为负数),而程序的执行过程无法检测和提示,此时不符合生活实际。
为了避免类似的情况发生,就需要给成员变量的赋值操作进行合理性的判断和提示,该方法就叫做封装,通俗的说,封装就是一种保证成员变量合理的机制。

编程实现Person类的封装

public class Person{

    //1.私有化成员变量
    private String name;     //用于描述姓名的成员变量
    private int age;         //用于描述年龄的成员变量
    //static关键字修饰成员变量表示隶属于类层级,被所有对象共享
    /*因为我们的country是一样的,所以提取到类层级上
    */
    public static String country; //用于描述国籍的成员变量

    //3.在构造方法中调用set成员变量的方法进行合理值的判断
    public Person(){
    }
    public Person(String name, int age, String country){
        setName(name);
        setAge(age);
        setCountry(country);
    }

    //2.提供公有的get成员变量和set成员变量的方法,并在方法体中进行合理性的判断
    public String getName(){
        //...
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int age){
        if(age > 0 && age < 150){
            this.age = age;
        }
        else{
            System.out.println("年龄不合理!!!");
        }
    }
    public String getCountry(){
        return country;
    }
    public void setCountry(String country){
        this.country = country;
    }

    public void show(){
        /*
        System.out.println("我是" + name + ",今年" + age + "岁了,来自" + country);
        */
        //推荐使用 利于修改和维护(便于在成员方法中修改)
        System.out.println("我是" + getName() + ",今年" + getAge() + "岁了,来自" + getCountry());
    }
}

编程实现Person类的测试

public class TestPerson{

    public static void main(String[] args){

         System.out.println("国籍是:" + Person.country);  //null

         Person p1 = new Person("zhangfei", 30, "China");
         p1.show();

         Person p2 = new Person("guanyu", 35, "China");
         p2.show();
         /*被static定义的成员变量提升为类层级,在方法区申请了一块内存,被所有线程共享,
         也就内存地址指向同一个地址,所以在任何一个对象下面修改,所修改的内容指向的地址
         都是同一个,即方法区中的成员变量的实际值被修改了*/
         p1.country = "America";
         System.out.println("p1.country = " + p1.country); //America
         System.out.println("p2.country = " + p2.country); //America

         Person p3 = new Person();
         System.out.println("p3.country = " + p3.country); //America
    }
}

封装的流程步骤:
(1)私有化成员变量,使用private关键字修饰;
(2)提供公共的get成员变量和set成员变量方法,在和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值