java面向对象之封装

封装是针对类里的属性和方法而言的,目的是为了提高程序的稳健型和安全性,将属性或者方法进行封装起来不被外部直接访问的特性叫做封装。例如:

//创建一个学生类
public class Student {
    String stuNo;
    String stuName;
    int age;
}
//创建测试类
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.stuName = "tom";
        student.stuNo = "001";
        student.age = 20;
    }
}

以上代码没有问题,可以正常使用

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.stuName = "tom";
        student.stuNo = "001";
        student.age = -20;
    }
}

这样写的话也能正常输出,很明显我们的年龄是不能为负数的,因此外部类可以任意的访问一个类的属性,对程序的稳健型来说是不可取的,这样会破坏已有的安全性,为此采用封装。
封装采用访问修饰符:private修饰所要访问的属性或者方法。

public class Student {
    private String stuNo;
    private String stuName;
    private int age;
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        //编译报错
        student.stuName = "tom";
        //编译报错
        student.stuNo = "001";
        //编译报错
        student.age = -20;
    }
}

类中属性不能被直接访问,因此提供get和set方法用于对属性进行赋值和访问获取。

public class Student {
    private String stuNo;
    private String stuName;
    private int age;

    public String getStuNo() {
        return stuNo;
    }

    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
//创建测试类
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setStuName("tom");
        student.setStuNo("001");
        student.setAge(20);
        System.out.println(student.getStuNo() + "," + student.getStuName() + "," + student.getAge());
    }
}
//输出结果:
001,tom,20

如果对方法进行封装,而外部需要调用应该怎么办?

public class Demo {
    private int getMax(int num1, int num2){
        return num1 > num2 ? num1 : num2;
    }
}

如上所述,如需调用getMax()方法该怎么办呢?很明显仅仅实例化Demo后还是不行,因为由于private关键字修饰,所以不可以直接进行调用,那么应该怎么处理呢?

public class Demo {
    private int getMax(int num1, int num2){
        return num1 > num2 ? num1 : num2;
    }
    //添加一个方法用以调用这个私有方法即可
    public int callGetMax(int num1, int num2){
        return getMax(num1, num2);
    }
}

我们只需要添加一个方法即可,切忌随便修改private关键字为public,因为我们对别人的逻辑和处理方式不太明白,因此需要调用别人的方法只能自己去写一个了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值