Java基础笔记28——封装

封装


隐藏属性:方法或实现细节的过程称为封装


特点:

1.构造器与类一般使用public修饰

2.属性一般使用private修饰,对外提供访问器访问属性


好处:

1.隐藏类的实现细节

2.让使用者只通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作

3.可进行数据检查



修饰类:public <default>
修饰变量、方法:public protected <default> private

public:      同类、同包、不同包子类、不同包
protected:同类、同包、不同包子类
<default>:同类、同包
private:    同类

e.g.
ClassOne.java:
package com.lqh.chapter02;

public class ClassOne {
private char var = 'a';
protected char getVar() {
return var;
}
char getVar2() {
return var;
}
}
ClassTest.java:
package com.lqh.chapter03;
import com.lqh.chapter02.ClassOne;

public class ClassTest extends ClassOne{
public static void main(String[] args) {
ClassTest test = new ClassTest();
char var = test.getVar();
char var2 = new ClassOne().getVar2();
}
}

以上程序是否能够编译成功?
(1)因为getVar方法被protected修饰,且test对象再不同包中的子类中,所以test.getVar()能够正常运行
(2)因为getVar2方法被default修饰,且new ClassOne()匿名对象不在同一个包中,所以new ClassOne().getVar2()不能正常运行

 

例子:

package com.lqh.chapter02;

public class _26fengzhuang {
    public static void main(String[] args) {
        Employee lqh = new Employee();
        /*
         * 属性已被private修饰,不允许类以外的人访问 lqh.empno = 212; lqh.ename = "lqh"; lqh.salary =
         * 4500.5;
         */

        // 调用set方法赋值
        lqh.setEmpno(212);
        lqh.setEname("");
        lqh.setSalary(2595);
        
        //调用get方法取值
        System.out.println(lqh.getEmpno());
        System.out.println(lqh.getEname());
        System.out.println(lqh.getSalary());
    }
}

class Employee {
    private int empno;// 员工编号

    private String ename;// 员工姓名

    private double salary;// 员工工资

    // 访问器(get与set)
    public int getEmpno() {
        // 1.隐藏类的实现细节
        return this.empno;
    }

    public void setEmpno(int empno) {
        this.empno = empno;
    }

    public String getEname() {
        return this.ename;
    }

    public void setEname(String ename) {
        //3.可进行数据检查
        if(ename == null || "".equals(ename)) {
            System.out.println("员工姓名不能为空!");
            return;
        }
        this.ename = ename;
    }

    public double getSalary() {
        return this.salary;
    }

    public void setSalary(double salary) {
        //2.可以方便地加入控制逻辑,限制对属性的不合理操作
        if (salary < 2600) {
            System.out.println("薪资不能少于2600");
            return;
        }
            this.salary = salary;
    }
}

输出结果为:

员工姓名不能为空!
薪资不能少于2600
212
null
0.0

posted @ 2021-09-14 23:43  `青红造了个白`  阅读(43)  评论(0编辑  收藏  举报