主要是对面向对象基础的进一步拓展,对private,static,this等关键字的熟练掌握。
文章目录
一,编写一个类Task,代表GTA5的主线任务。
1.问题
-
要求:具有属性: 名称(title)、任务序号(num),其中主线任务不能多于69个或者少于0个,否则输出错误信息,并赋予默认值 1。
-
具有方法: 为各属性设置赋值和取值方法。 say,用来在控制台输出每个主线任务的名称及目前的任务序号
-
编写测试类 TaskTest 进行测试:为 Task对象的属性赋予初始值,并调 用 Task 对象的 say方法,看看输出是否正确
2.代码
代码如下:
public class TaskTest {
public static void main(String[] args) {
Task t1 = new Task();
t1.setTitle("依计行事");
t1.setNum(100); //错误测试
t1.say();
Task t2 = new Task("谍影重重", 44);
t2.say();
}
}
class Task {
private String title; // 名称
private int num; // 序号
Task() { // 构造方法——无参
title = "空";
num = 1;
}
Task(String title, int num) { //有参
this.setTitle(title);
this.setNum(num);
}
public String getTitle() { // getter与setter方法
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getNum() {
return num;
}
public void setNum(int num) {
if (num > 69 || num < 0) {
System.out.println("任务序号不能多于69或少于0,已自动设置为默认值1");
this.num = 1;
} else this.num = num;
}
public void say() { // 输出任务详情
System.out.println("任务名:" + this.title);
System.out.println("任务序号:" + this.num);
System.out.println();
}
}
private意译为“私有的”,被private修饰的成员只能在本类中访问。
public意译为“公开的”,其修饰的成员数据或方法对外部可见。
3.效果截图
二,通过类描述R星公司的GTA6开发员
1.问题
- 具有属性: 姓名,年龄,性别,爱好,公司(都是:R星),小组(都是:GTA6制作组)。
2.代码
代码如下:
package StudentDemo;
public class StudentDemo {
public static void main(String[] args) {
Student.company = "R星";
Student.subject = "GTA6小组";
Student S1 = new Student("张三", 21, "男", "打篮球");
Student S2 = new Student("李四", -15, "人妖", "踢足球"); //错误测试
Student S3 = new Student("王五", 160, "女", "打排球"); //错误测试
S1.say();
S2.say();
S3.say();
System.out.println("-----------修改后----------");
S2.setAge(20);
S2.setSex("男");
S3.setAge(22);
S1.say();
S2.say();
S3.say();
}
}
class Student {
private String name;
private int age;
private String sex;
private String hobby;
static String company; //静态成员变量,表示类共有
static String subject; //静态成员变量
Student() {
this.name = "空";
this.age = 0;
this.sex = "空";
this.hobby = "空";
}
Student(String name, int age, String sex, String hobby) {
this.setName(name);
this.setAge(age);
this.setSex(sex);
this.setHobby(hobby);
}
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 || age > 150) {
System.out.println("同学[" + this.name + "]的年龄为[" + age + "],请输入1~150");
} else this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
if (sex != "男" && sex != "女") {
System.out.println("同学[" + this.name + "]的性别为[" + sex + "],请输入男/女");
} else this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public void say() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("性别:" + sex);
System.out.println("爱好:" + hobby);
System.out.println("公司:" + company);
System.out.println("小组:" + subject);
System.out.println();
}
}
static为静态成员变量,可以直接使用“类名.静态方法名()”调用。表示整个类所共有的。
3.效果图
三,通过类描述GTA5三主角, 每个主角对象创建时需要自动生成一个序号值
1.问题
- 要求:每个主角的序号是不同的, 且是依次递增 1 的
2.代码
代码如下:
package LeadDemo;
public class LeadDemo {
public static void main(String[] args) {
Lead l1 = new Lead("富兰克林", 28);
Lead l2 = new Lead("麦可", 48);
Lead l3 = new Lead("崔佛", 48);
l1.say();
l2.say();
l3.say();
}
}
class Lead {
private static int count = 0;
private String name;
private int age;
private int ID; //序号
{
this.ID = ++count;
}
Lead() {
}
Lead(String name, int age) {
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void say() {
System.out.println("姓名:" + name);
System.out.println("序号:" + ID);
System.out.println("年龄:" + age);
System.out.println();
}
}
注意:
- 构造代码块 每次创建新的对象时均会调用
- 执行顺序:静态代码块>构造代码块>构造方法