当前位置:首页 > 第3章-面向对象(上)-补充案例
第3章-面向对象(上)-补充案例
}
}
public int getAge() { }
public void setAge(int a) { }
void speak() { }
System.out.println(\我的名字是\,今年\岁\// 对传入的参数进行检查 if(a < 0){ }
System.out.println(\设置的年龄不合法\age = a; }else{ return age; name = n;
public class Example02 { }
public static void main(String[] args) { }
Student s1 = new Student(); s1.setName(\小新\s1.setAge(-30); s1.speak();
运行结果如图3-4所示。
图3-4 运行结果
三、案例总结
1、Student的name和age属性使用private关键字修饰为私有后,在Example02类中不能再使用s1.name和s1.age的方式访问这两个属性,只能通过public类型的setName(String n)和setAge(int a)方法进行访问。在上面的代码中,调用setAge(int a)方法时的传入参数为-30,由于参数小于0,会打印出“设置的年龄不合法”,并不会将负数赋值给age属性。由此可见,只要实现了封装就能对外界的访问进行控制,避免对私有变量随意修改而引发问题。
2、思考一下:定义一个Division类(除法),类中定义两个int类型的私有成员变量dividend(被除数)和 divisor(除数),默认值都为1。定义四个公有方法setDividend(int mDividend )、getDividend()、setDivisor(int mDivisor)和getDivisor(),用于对私有属性进行设置和访问。在setDivisor(int mDivisor)方法中对传入的参数进行检查,如果传入值为零,则打印“除数不能为零”,如果不为零,才将其设置为divisor属性的值。
5 / 25
第3章-面向对象(上)-补充案例
定义Example03类,在类的main()方法中创建Division对象,分别调用setDividend(int mDividend)和setDivisor(int mDivisor)方法给两个私有属性dividend和divisor赋值,然后打印出dividend和divisor的结果。
(1)定义Division类,代码如下所示:
public class Division { }
private int dividend = 1; private int divisor = 1;
public void setDividend(int mDividend) { }
public int getDividend() { }
public void setDivisor(int mDivisor) { }
public int getDivisor() { }
return divisor; if (mDivisor == 0) { }
System.out.println(\除数不能为零\divisor = mDivisor; } else {
return dividend; dividend = mDividend;
(2)定义Example03类,代码如下所示:
public class Example03{ }
public static void main(String[] args) { }
Division division = new Division(); division.setDividend(10); division.setDivisor(0);
int dividend = division.getDividend(); int divisor = division.getDivisor(); System.out.println(dividend / divisor);
运行结果如图3-5所示。
图3-5 运行结果
从运行结果可以看出,由于实现了Division类的封装,在setDivisor(int mDivision)方法中对传入的值进行检查,从而避免程序中出现除数为0的错误。
6 / 25
第3章-面向对象(上)-补充案例
案例3-4 定义有参的构造方法 一、案例描述
1、 考核知识点
编号:
名称:构造方法的定义
2、 练习目标
? 掌握有参构造方法的定义方式
? 理解系统会自动分配无参构造方法的情况
3、 需求分析
如果希望在创建对象的时候直接为其属性赋值,可以定义有参的构造方法。有参构造方法指的是在初始化对象时,接受外部传入的值并赋给对象的属性。为了让初学者掌握有参构造方法的用法,本案例将演示如何使用有参构造方法完成对象属性的初始化。
4、 设计思路(实现原理)
1) 定义一个Student类,该类有一个age属性,在类中定义一个有参数的构造方法,该参数用
于为age属性赋值。
2) 编写一个测试类Example04,在main()方法中通过有参构造方法创建一个对象。 3) 打印该对象age属性的值。
二、案例实现
1、对Student类进行修改,代码如下所示:
class Student { }
int age;
public Student(int mAge) { }
age = mAge;
2、定义Example04类,代码如下所示:
public class Example04 { }
public static void main(String[] args) { }
Student s1 = new Student(20);
System.out.println(\属性的值为:\
运行结果如图3-6所示。
图3-6 运行结果 7 / 25
第3章-面向对象(上)-补充案例
三、案例总结
1、从运行结果可以看出,new Student(20)语句调用了有参的构造方法Student(int mAge),动态地将20传递给了age属性。和普通方法一样,构造方法中同样可以接收多个参数,只要在使用new关键字创建对象时,传入数量相同和类型一致的参数,就可以自动地调用对应的构造方法。
2、思考一下:在Example04的main()方法中是否能够使用new Student()创建对象呢?答案是否定的,因为new Student()会调用无参的构造方法,而本案例的Student类中并没有定义无参的构造方法。
有些同学肯定会问,之前的Student类都没有定义无参的构造方法,却能使用new Student()创建对象,本案例为什么不行呢?这是因为一个类中如果没有定义构造方法,系统会默认为其分配一个方法体为空的无参构造方法,而一旦定义了构造方法,系统就不再提供默认的构造方法。本案例中由于我们定义了一个有参的构造方法,所以系统不会默认分配无参的构造方法,此时如果通过new Student()去调用无参的构造方法,程序就会发生错误。
案例3-5 构造方法的重载 一、案例描述
1、 考核知识点
编号:
名称:构造方法重载
2、 练习目标
? 掌握如何在类中定义重载的构造方法
3、 需求分析
和普通方法一样,构造方法也可以重载。不同的构造方法,可以为不同的属性进行赋值。本案例将通过创建对象的方式演示不同构造方法的使用方式,并根据构造方法的输出结果对构造方法的重载进行学习。
4、 设计思路(实现原理)
1)对Student类进行修改,在类中定义三个重载的构造方法,包括无参的构造方法,接收一个String类型参数的构造方法,接收String类型和int类型两个参数的构造方法。
2)编写测试类Example05,在main()方法中,分别使用三个重载的构造方法创建三个Student对象。
二、案例实现
1、对Student类进行修改,代码如下所示:
class Student {
public Student() { }
public Student(String name) {
System.out.println(\无参的构造方法\
8 / 25
共分享92篇相关文档