在上一个实验中,学生类创建的对象的年龄是可以随便赋值的,如果将age的值赋值为-30,显然违背了事实。为了解决这类问题,我们需要对类进行封装,防止外界对类中的成员变量随意访问。为了让同学们更好的掌握封装的概念,本实验将使用private关键字对成员变量name和age进行私有化,同时分别提供一个setName(String n)和setAge(int a)方法用于外界的访问,其中setAge(int a)中需要对age进行判断。 1) 编写测试类,将属性age的值设为-30,演示不合理现象。 2) 对Student类进行修改,将name和age属性使用private修饰,然后定义getName()、setName(String n)、getAge()和setAge(int a)四个对外访问name和age的方法。 3) 在setAge(int a)方法中对传入的参数进行检查,如果输入值为负数,则打印出“设置的年龄不合法”,如果不为负数,才将其设置为age属性的值。 4)对测试类进行修改,在main()方法中创建Student类的实例对象,通过调用对象的setName(String n)和setAge(int a)方法来设置的name属性和age属性值,并调用speak()方法。
时间: 2024-01-21 18:19:07 浏览: 76
IOS ObjectiveC中的赋值与对象拷贝
1)测试类演示不合理现象:
```java
public class TestStudent {
public static void main(String[] args) {
Student stu = new Student();
stu.age = -30;
stu.speak();
}
}
```
运行结果:
```
我叫null,今年-30岁。
```
2)修改Student类,使用private修饰name和age属性,并提供对外访问的方法:
```java
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age < 0) {
System.out.println("设置的年龄不合法");
} else {
this.age = age;
}
}
public void speak() {
System.out.println("我叫" + name + ",今年" + age + "岁。");
}
}
```
3)在setAge(int a)方法中添加对输入参数的判断,如果为负数则打印出“设置的年龄不合法”,否则才将其设置为age属性的值。
4)测试类修改如下:
```java
public class TestStudent {
public static void main(String[] args) {
Student stu = new Student();
stu.setName("小明");
stu.setAge(-30);
stu.speak();
stu.setAge(18);
stu.speak();
}
}
```
运行结果:
```
设置的年龄不合法
我叫小明,今年0岁。
我叫小明,今年18岁。
```
阅读全文