我们都知道类是对象的模板,可以用来创建对象,那么谁可以用这套模板创建对象呢?我们不可能让别人知道我们这套模板的全部细节,那我们应该提供哪些信息以及保留哪些信息呢?这些都是我们在设计类的时候需要思考的问题。
我们先假设一下一个公司开发了一个模板,public的意思是公司把开发了一个模板的信息公布出去了,所有人都知道了这个公司开发了这套模板;不加修饰符的意思是公司没有把这套模板给宣扬出去,所以只是在公司内知道这套模板,在公司外没有知道这套模板;protected和private在类的声明上是不被允许使用的,因为公司开发了这套模板就是要使用的,要么公布出去大家一起用,要么留着给公司自己用,而不是将这套模板给藏起来(这里讨论的都是外部类)。所以类的声明可以是这样的:
[public] class Person{}
我们讨论一下类的属性。我们知道类的属性对应着对象的状态,对象的状态是会有一定的约束的,比如人的年龄不会是负数,性别也只有男女,我们不应该让用户随意去创建对象,因为它们很有可能会创建出一些不太合理的对象(比如创建了年龄为负数的人),所以我们应该去给它们一点约束,用private将属性给藏起来,然后再写一个公有的方法提供给用户去定义对象的状态(我们需要在这个方法里给出我们的约束条件)。当然,我们把整个属性都藏起来了,也需要提供一个公有的方法让用户能够获取到这个对象的状态。
public class Person{
private String name;
private int age;
private char sex;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
if(age >= 0 && age <= 120){
this.age = age;
}
}
public int getAge(){
return age;
}
public void setSex(char sex){
if(char == '男' || char == '女')
this.sex = sex;
}
public char getSex(){
return sex;
}
}
现在讨论一下类的方法。类的方法是对象的行为。在设计类的方法上,我们要思考的是这个类要实现什么功能,通常在方法的设计上都是用public修饰,不过具体情况可能也需要具体分析。
最后是构造器。构造器是一个特殊的方法,它没有返回值,方法名和类名一致。当我们没有显示的定义构造器时系统会默认的帮我们生成一个无参构造器。构造器的参数通常都是类的属性,因为构造器是用来创建对象的。构造器通常用public修饰,只有当只需要一个或者有限个对象的时候才会用private修饰(单例或多例设计模式)。当构造器使用了private修饰时我们需要在类中提供一个公有的方法让用户能够创建或者获取到对象。