『JavaSE』封装

封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。

什么是封装?

这里我们借用《代码大全》中的说法进行理解,《代码大全》中说,软件开发的本质就是对程序复杂程度的管理。如果一个软件代码复杂程度太高,那么就无法继续维护。如何管理复杂程度

  • 封装就是最基本的方法
  • C语言中的函数也可以理解成一种封装,让调用者不必关注实现的细节
  • Java面向对象中的封装也是类似,类的使用者不必过多关注实现的细节,从而降低整体代码的复杂程度

private实现封装

public和private这两个关键字表示访问权限控制

  • 被public修饰的成员变量或者成员方法,可以直接被类的调用者使用
  • 被private修饰的成员变量或者成员方法,不能被类的调用者使用

下面来看两个例子
直接使用public

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println("name: " + student.name +
                ", age: " + student.age);
    }
}

class Student {
    public String name = "sss";
    public int age = 24;
}

在这里插入图片描述
上述代码虽然也可以,但是类的使用者(main方法)必须了解Student类的内部实现,才能够使用这个类。学习成本较高


使用private

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.show();
    }
}

class Student {
    private String name = "sss";
    private int age = 24;

    public void show() {
        System.out.println("name: " + this.name
            + ", age: " + this.age);
    }
}

在这里插入图片描述
此时,字段已经使用private来修饰,类的调用者(main方法中)不能直接使用。而需要借助show方法。此时类的使用者就不需要了解Student类的实现细节
同时如果类的实现者修改了字段的名字,类的调用者不需要做出任何修改(类的调用者根本看不到name,age这样的字段)


注意

  • private不仅能够修饰字段,也能修饰方法
  • 通常情况下我们会把字段设为private属性,但是方法是否需要设为public,就需要视具体情形而定。一般我们希望一个类只提供“必要”的public方法,而不应该把所有的方法都无脑设为public。

getter和setter方法

当我们使用private修饰字段的时候,就无法直接使用这个字段了,但是如果有些场景需要获取或者修改这个private字段,我们可以通过getter和setter方法来实现

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.getAge());

        student.setAge(18);
        student.show();
    }
}

class Student {
    private String name = "sss";
    private int age = 24;

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("name: " + this.name
            + ", age: " + this.age);
    }
}

在这里插入图片描述
注意

  • getAge即为getter方法,表示获取这个成员的值setAge即为setter方法,表示设置这个成员的值
  • getter和setter方法能不提供就不要提供,会破坏封装性
  • IDEA中可以使用alt + insert快速生成getter和setter方法

通常将类的数据成员称为字段(field),如果该字段同时提供了getter/setter方法,那么也可以称它为属性(property)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值