16-面向对象编程-封装

面向对象编程有三大特征:封装、继承和多态

 

访问修饰符可以控制属性的访问范围

public:表示公共访问级别,可以被任何类访问。

protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。

default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包中的类访问。

private:表示私有访问级别,只能在类内部访问。 

修饰符
子类
其他包
public
protected
×
default
×
×
private
×
×
×

封装介绍

封装 (encapsulation) 就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作 [方法] ,才能对数据进行操作。

换句话说,方法封装是将一些有共性的或多次被使用的代码提取到一个方法中,供其他地方调用。

封装的好处

避免代码冗余容易维护,隐藏代码实现的细节。

封装的实现步骤

1) 将属性进行私有化【不能直接修改属性】

2) 提供一个公共的 set()方法,用于对属性判断并赋值

3) 提供一个公共的 get()方法,用于获取属性的值

//封装案例,要求不能随便查看人的年龄隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则默认
//年龄必须在1-120,年龄不能直接查看

public class Encapsulation01 {
    public static void main(String[] args) {
        Person p = new Person();
        p.name = "马铃薯";
        p.setAge(26);

        System.out.println("姓名:" + p.name + "\t年龄:" + p.getAge());

    }
}

class Person{
    //名字是公共的
    public String name;
    //年龄是私有的,private修饰符表示只能在当前类内访问
    private int age;

    //创建get()方法,用于对属性判断并赋值
    public int getAge() {
        return age;
    }
    //创建set()方法,用于获取属性的值
    public void setAge(int age) {
        if(age >= 1 && age <= 120){
            this.age = age;
        }else{
            System.out.println("年龄设置不合理,需要在 1-120 之间!");
            this.age = 0;
        }
    }
}

构造器 与 set()方法相结合

构造器主要是完成对新对象的初始化,而 get() 和 set()方法则是完成对属性的获取和赋值。

public class Encapsulation02 {
    public static void main(String[] args) {
        Person2 p2 = new Person2("马铃薯", 26);
        System.out.println("姓名:" + p2.name + "\t年龄:" + p2.getAge()); //姓名:马铃薯    年龄:26

        p2.name = "任先生";
        p2.setAge(18);
        System.out.println("姓名:" + p2.name + "\t年龄:" + p2.getAge()); //姓名:任先生    年龄:18
    }
}

class Person2{
    public String name;
    private int age;

    //构造方法
    public Person2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //get() 和 set()方法
    public int getAge() {
        return age;
    }

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

 

posted @ 2023-08-17 15:19  马铃薯1  阅读(7)  评论(0编辑  收藏  举报