目标
理解封装的概念
掌握private关键字
为什么需要构造方法?
开发教员类Teacher4,要求:
具有属性:姓名、年龄、学历、职位
具有行为:自我介绍
public class Teacher4 {
private Stringname; // 姓名
private int age;// 年龄
private Stringeducation; // 学历
private Stringposition; // 职位
public String introduction() {
return "大家好!我是" +name + ",我今年" + age + "岁,学历" + education + ",目前职位是"+ position;
}
public String getName() {
return name;
}
public void setName(String myName) {
name = myName;
}
// 以下是其他属性的setter、getter方法,此处省略
}
编写一个测试类,要求:
实例化一个教员对象,并对其初始化
在控制台输出该教员的自我介绍
public class Teacher4Test {
public static void main(String[] args) {
Teacher4 teacher = new Teacher4();
teacher.setName("李芳");
teacher.setAge(23);
teacher.setEducation("本科");
System.out.println(teacher.introduction());
}
}
输出:大家好!我是李芳,我今年23岁,学历本科,目前职位是null
Teacher4中有太多的属性及对应的setter方法,在初始化时,很容易就忘记了,有没有可能简化对象初始化的代码?
要简化对象初始化的代码,可以通过构造方法来解决。
什么是构造方法?
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值
构造方法必须满足以下语法规则:
1、方法名与类名相同
2、没有返回类型
使用new关键字调用构造方法
通过带参数的构造方法,显式地为实例变量赋予初始值
public class Teacher6 {
private Stringname; // 教员姓名
private int age;// 年龄
private Stringeducation; // 学历
private Stringposition; // 职位
// 带参数的构造方法
public Teacher6(String pName,int pAge, String pEducation, String pPosition) {
name = pName;
age = pAge;// 可以增加对age等属性的存取限制条件
education = pEducation;
position = pPosition;
}
public String introduction() {
return "大家好!我是" +name + ",我今年" + age + "岁,学历" + education + ",目前职位是"
+ position;
}
}
通过调用带参数的构造方法,简化对象初始化的代码
public class Teacher6Test {
public static void main(String[] args) {
Teacher6 teacher = new Teacher6("李芳", 23,"本科", "咨询师");
System.out.println(teacher.introduction());
}
}
输出:大家好!我是李芳,我今年23岁,学历本科,目前职位是咨询师
构造方法重载:
public class Teacher7 {
private Stringname; // 教员姓名
private Stringschool = "北京中心"; // 所在中心
public Teacher7(String name) {
this.name = name;// 设定教员姓名
}
public Teacher7(String name, String school) {
this.name = name;// 设定教员姓名
this.school = school;// 设定教员的所在中心
}
public String introduction() {
return "大家好!我是" +school + "的" + name;
}
}
通过调用不同的构造方法来表达对象的多种初始化行为
例如:
默认情况下,教师来自北京中心,初始化时,只需提供教员姓名
有时,需要提供所在中心名称及教员姓名
public class Teacher7Test {
public static void main(String[] args) {
Teacher7 teacher1 = new Teacher7("李芳");
System.out.println(teacher1.introduction());
Teacher7 teacher2 = new Teacher7("张欣","天津中心");
System.out.println(teacher2.introduction());
}
}
输出:大家好!我是北京中心的李芳
大家好!我是天津中心的张欣