[Java] 2.封装

封装


封装就是要程序员学会正确设计类对象的属性和方法,举个例题:

请对“人 在 加油站 加200块汽油” 进行面向对象设计。

显然我们可以得到两个类
:class Person {}
加油站:class GasStation() {}
和一个方法
加油: void oiling(int volume) {}

问题来了,方法 oiling() 应该归属于人还是加油站。

答案:归属于加油站

封装原则: 对象代表什么,就要封装对应的数据,并提供数据对应的行为

class GasStation {
    int volume;
    public void oiling(int volume) {
        System.out.println("给人加" + volume + "升汽油");
    }
}

又或是“人关门”,对应两个类(人、门),而关门这个方法应该属于门自己,人只是调用门的关闭方法来实现关门。


private

类成员的权限修饰符,被private修饰的成员只能在本类中访问来保证安全性。

public class Person {
    private String name;
    private int age;
}

Person p1 = new Person();
p1.age = 18;  //无法执行

保证了安全性,但可用性下降了,解决如下:
设计setAge方法用于设置age
getAge用于对外界提供age
既保证了数据安全性,也保证了可用性。

public class Person {
    private String name;
    private int age;

    public void setAge(int age) {
        if (age >= 18 && age <=50) age = a;
        else System.out.println("数据非法");
    }

    public int getAge() {
        return age;
    }
}

就近原则

同名变量,就近原则

class Person {
    private int age = 10;

    public void method() {
        int age = 18;
        System.out.println(age);  // 触发就近原则,输出18
    }
}

结果为18。如果要调用成员变量age=10而不是局部变量age=18,则需要用this.age

posted @ 2023-03-01 11:14  李八御  阅读(32)  评论(0)    收藏  举报