Java中 set()和get()方法

面向对象三个特征:封装,继承,多态。(都是什么样的表现形式?)

其中封装性中最重要的表现形式之一是将类中的成员变量私有化(使用privete修饰符),然后通过set()和get()方法从外部使用这个变量

set() get()方法:

  • 使得可以访问类内部的私有化(private)成员属性;
  • 首先:为何要私有化数据?提高安全性,使得外部不能够直接访问,也是封装的一种表现形式;
  • 其次,为何又要设置方法来使用数据(使用数据的两种方式:设置:set(),获取:get())?可以在方法中对数据的使用制定规则(逻辑判断语句)!
  • 最终提高代码的健壮性,安全性。将不需要对外提供的内容(通常是属性)隐藏,提供公共(public)方法对其访问。

请对比下列两种访问类中成员属性的方法,体会用法:
第一种:成员属性没有private修饰符

class Person
{
    int age;   //Person类中的age成员属性没有private修饰符
    void speak(){
        System.out.println("age = " + age);
    }
}
class  personDemo
{
    public static void main(String[] args) 
    {
        Person p = new Person();//实例化Person类,获得对象的引用p
        p.age = 20;   //可以从外部直接访问Person类的成员属性age
        p.speak();
    }
}

第二种:成员属性前缀private修饰符

class Person
{
    private int age;   //Person类中的age成员属性前缀private修饰符
    void speak(){
        System.out.println("age = " + age);
    }
}
class  personDemo
{
    public static void main(String[] args) 
    {
        Person p = new Person();
        //p.age = 20;   错误语句,无法直接通过对象引用访问age成员属性(目的:提高安全性、健壮性)
        p.speak();
    }
}

解决方法:使用set()和get()方法

class Person
{
    private int age;    //Person类中的age成员属性前缀private修饰符
    public void setAge(int age_1){   //定义公用方法, 注意区分age_1和this.age
        this.age= age_1;
    }
    public int getAge(){
        return age;
    }
    void speak(){
        System.out.println("age = " + age);
    }
}
class  personDemo
{
    public static void main(String[] args) 
    {
        Person p = new Person();
        p.setAge(20);
        int age = p.getAge();
        p.speak();
    }
}

为何要使用set()和get()方法,多此一举?

class Person
{
    private int age;   
    public void setAge(int age_1){ 
        if(age_1>=0 && age_1<130){  
            this.age= age_1;
            speak();
        }
        else
            System.out.println("illegal age!");//提高安全性,外部无法传入-1这种年龄!
    }
    public int getAge(){
        return age;
    }
    void speak(){
        System.out.println("age = " + age);
    }
}
class  personDemo
{
    public static void main(String[] args) 
    {
        Person p = new Person();
        p.setAge(20);
        int age = p.getAge();
        p.speak();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值