Java封装性及四种权限修饰符详解

1、封装概述

       封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

封装的优点

  1. 良好的封装能够减少耦合。

  2. 类内部的结构可以自由修改。

  3. 可以对成员变量进行更精确的控制。

  4. 隐藏信息,实现细节。


2、封装性的使用

public class Main {

    public static void main(String[] args) {
        Student student = new Student();
        student.name="皮皮虾";
        student.age=20;
        
        student.show();
    	student.age=-5;
        student.show();
    }

}


class Student{
    String name;
    int age;

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

}

在这里插入图片描述

上述代码表面上看没有什么问题,但在实际开发中对于属性肯定会有一些限制,例如:年龄不能为负数

解决方法

  • 提供getter和setter方法获取属性和给属性赋值,且在该方法中可以设置条件判断
  • 使用权限修饰符来注销掉原来的例如student.age=20; 这种赋值方法。
public class Main {

    public static void main(String[] args) {
        Student student = new Student();

        student.setAge(5);
        student.show();
        student.setAge(-2);
        student.show();
    }

}


class Student{
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
    	//条件判断
        if (age >= 0){
            this.age = age;
        }else {
            this.age = 0;
        }

    }

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

}

在这里插入图片描述


3、封装的作用

  • 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
  • 对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

4、四种权限修饰符

      Java中,可以使用访问控制符来保护对变量方法构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

在这里插入图片描述

通过以下表来说明访问权限:

修饰符类内部同一包内不同包子类同一工程
privateYes
default(缺省)YesYes
protectedYesYesYes
publicYesYesYesYes

对于class的权限修饰符只可以用public和default(缺省)
public类可以在任意地方被访问
default类只可以被同一包内部的类访问


5、四种权限修饰符测试

在同一包下,创建Main类和test类
在这里插入图片描述
Main.java

public class Main {

    String defaultName;
    private String privateName;
    public String publicName;


    private void privateMethod() {
        defaultName = "1";
        privateName = "2";
        publicName = "3";
    }

    public void publicMethod() {
        defaultName = "1";
        privateName = "2";
        publicName = "3";
    }

     void defaultMethod() {
        defaultName = "1";
        privateName = "2";
        publicName = "3";
    }
}

test.java
在这里插入图片描述
在这里插入图片描述

在另一个包下就建立test02类
在这里插入图片描述

test02.java
在这里插入图片描述

在另一个包下,原先的私有结构、缺省声明的结构都无法使用。

在这里插入图片描述


觉得不错的小伙伴可以点赞关注和收藏哦!

Java学习路线目录索引

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值