JAVA
课件 第一章 面向对象的Java实现-封装
举例说明什么是方法重载?
Java中的构造方法与实例方法,有什么区别?
封装:就是隐藏实现细节
将属性私有化,提供公有方法访问私有属性
通过这些公有方法访问私有属性
public class AccpTeacher2 {
private String name; // 教员
// 返回教员
public String getName() {
return name;
}
// 设定教员
public void setName(String name) {
this.name = name; //this代表当前类的实例
}
AccpTeacher2 teacher = new AccpTeacher2();
teacher.setName ("李芳");
String tName = teacher.getName(); //通过setter、getter方法访问name属性
封装的实现:
1、修改属性的可见性来限制对属性的访问
2、为每个属性创建一对赋值(setter)方法和取值(getter) 方法,用于对这些属性的访问
3、在setter和getter方法中,加入对属性的存取限制
例如:public class AccpTeacher3 {
private String name; // 教员
private int age; //年龄
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<22) {
System.out.println("错误!最小年龄应为22岁!");
this.age = 22; //如果不符合年龄要求,则赋予默认值
} else {
this.age = age;
}
}
//此处省略对name属性的setter、getter方法
}
测试类通过调用setter方法,为对象的各个属性赋值
public class AccpTeacher3Test {
public static void main(String[ ] args) {
AccpTeacher3 teacher = new AccpTeacher3();
teacher.setName ("李芳");
teacher.setAge(10);
System.out.println(teacher.introduction());
}
}
结果:错误!最小年龄应为22岁!
大家好!我是李芳,我今年22岁
使用封装,增加了数据访问限制,增强了程序的可维护性
小结 1
使用private关键字修饰某个成员变量后,这个成员变量可以被同一包中的其它类访问吗?
在Java程序中,代码封装带给我们的好处是什么?
为什么需要构造方法:简化对象初始化的代码
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值
构造方法必须满足以下语法规则:
1、方法名与类名相同
2、没有返回类型
使用new关键字调用构造方法
public class AccpTeacher5Test {
public static void main(String[ ] args) {
AccpTeacher5 teacher = new AccpTeacher5();
}
}
通过带参数的构造方法,显式地为实例变量赋予初始值
通过调用带参数的构造方法,简化对象初始化的代码(创建对象时,一并完成了对象成员的初始化
工作)
构造方法重载是方法重载的典型示例
public class AccpTeacher7 {
private String name; // 教员
private String school = "北京中心"; // 所在中心
public AccpTeacher7(String name) {
this.name = name; //设定教员
}
public AccpTeacher7(Strin
g name, String school) {
this.name = name; //设定教员
this.school = school; //设定教员的所在中心
} //构造方法重载
public String introduction() {
return "大家好!我是" + school + "的" + name ;
}
}
构造方法重载
通过调用不同的构造方法来表达对象的多种初始化行为
例如:
默认情况下,教师来自北京中心,初始化时,只需提供教员
有时,需要提供所在中心名称及教员
public class AccpTeacher7Test {
public static void main(String[ ] args) {
AccpTeacher7 teacher1 = new AccpTeacher7("李芳");
System.out.println(teacher1.introduction());
AccpTeacher7 teacher2 = new AccpTeacher7("张欣","天津中心");
System.out.println(teacher2.introduction());
}
}
总结
代码改错:给定如下Java代码,请指出代码中的错误,并解释原因
public class Sample {
private int x;
public Sample() { //正确,无参构造方法
x = 1;
}
public Sample(int i) { //正确,带参构造方法
x = i;
}
public int Sample(int i) { //正确,但不是构造方法
x = i;
return x++;
}
private Sample(in