public、private

  1. public
  2. private
    1. 1)private修饰属性
    2. 2)private修饰方法

我们平时都会将对象的属性定义为private,然后编写相应的public的接口使得外部可以间接访问这些属性。
外部只需要获取返回结果,不需要关心内部如何实现处理逻辑,为了业务逻辑清晰,我们可以把部分逻辑代码拆成单独的private方法仅供内部调用。

public

一个class可以包含多个属性,例如,我们给Person类就定义了两个属性:

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

但是,用public修饰属性暴露给外部可能会破坏封装性。比如,代码可以这样写:

Person ming = new Person();
ming.name = "Xiao Ming";
ming.age = -99; // age设置为负数 

private

1)private修饰属性

显然,直接操作属性,容易造成逻辑混乱。为了避免外部代码直接去访问属性,我们可以用private修饰属性来拒绝外部直接访问,然后编写对外开放的访问接口。

class Person {
    private String name;
    private int age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    public void setAge(int age) {
        if (age < 0 || age > 100) {
            throw new IllegalArgumentException("invalid age value");
        }
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person ming = new Person();
        ming.setName("Xiao Ming"); // 设置name
        ming.setAge(12); // 设置age
        System.out.println(ming.getName() + ", " + ming.getAge());
    }
}

2)private修饰方法

为了业务逻辑清晰,我们可以把部分逻辑代码拆成单独的private方法仅供内部调用,如上代码可以改写为下面程序。

class Person {
    private String name;
    private int age;

    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        Boolean valid = check(age);
        if ( valid == false) {
            throw new IllegalArgumentException("invalid age value");
        }
        this.age = age;
    }

    private boolean check(int age){
        if (age < 0 || age > 100) {
            return false;
        }
        return true;
    }
}

public class Hello {
    public static void main(String[] args) {
        Person ming = new Person();
        ming.setName("Xiao Ming"); // 设置name
        ming.setAge(12); // 设置age
        System.out.println(ming.getName() + ", " + ming.getAge());
    }
}

他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!

目录
×

喜欢就点赞,疼爱就打赏