如题:
使用继承编写Person、Student类
- 编写Person类:
- 属性有:姓名、年龄、出生日期
- 方法有:showInfo();
- 编写Student类:
- 属性有:姓名、年龄、出生日期、学校
- 方法有:showInfo();
- study();
- 使用继承优化Student类。
Ready Go!
第一步
Person类
1 package a; 2 //父类 3 public class Person { 4 // 为了让成员变量隐藏(封装),便于对值制定规则;否则变量会被直接赋值。 5 private String name; 6 private int age; 7 private String birthday; 8 // 年龄必须在构造函数中传入,因为没有set方法,私有变量不允许访问 9 // 如果年龄小于0,年龄就是0;否则才给age赋值 10 public Person(int age) { 11 if (age<0) { 12 this.age=0; 13 }else { 14 this.age=age; 15 } 16 } 17 // 为了给其他用户访问变量,我们用get和set方法给变量赋值 18 // 为name提供get方法 19 public void setName(String name) { 20 this.name=name; 21 } 22 public String getName(String name) { 23 return this.name; 24 } 25 // 自动生成get、set方法 26 // Source→ 27 public String getBirthday() { 28 return birthday; 29 } 30 public void setBirthday(String birthday) { 31 this.birthday = birthday; 32 } 33 // 题目要求方法showInfo,打印相关信息 34 // 可将此段代码放到前边,便于阅读,这里为了便于理解,代码按书写顺序罗列。 35 public void showInfo() { 36 System.out.println("name="+name+";age="+age+";birthday="+birthday); 37 } 38 }
测试类
1 package a; 2 // 测试类 3 public class Demo { 4 public static void main(String[] args) { 5 // 创建对象p1,调用构造方法 6 // 此处,如果Person类中,age是无参构造方法,此处很容易忘记赋值;有参方法则必须要赋值。 7 Person p1 = new Person(18); 8 p1.setName("Jack"); 9 p1.showInfo(); 10 } 11 }
输出结果
name=Jack;age=18;birthday=null
第二步
编写Student类
/*
* 在子类继承后,需要在测试类中为Student类创建对象,构造方法,
* 同时,子类在继承父类的成员变量时,会默认创建一个构造方法,
* 此构造方法会默认调用父类的默认构造方法,然而此时父类中只有Person(int age);
* 因为我们添加了一个构造方法,所以系统不会再为我们提供默认构造方法,
* 所以我们在创建Student类后,需要为Person类补一个默认构造方法。
*/
1 package a; 2 //子类 3 public class Student extends Person{ 4 // 默认构造方法,可删除,系统会自动提供 5 public Student() { 6 7 } 8 // 根据题意添加属性 9 private String schoolName; 10 // 自动生成方法 11 public String getSchoolName() { 12 return schoolName; 13 } 14 public void setSchoolName(String schoolName) { 15 this.schoolName = schoolName; 16 } 17 // 根据题意添加方法 18 // 下面方法中Student类从Person类中继承过来的方法需要现在测试类中构造 19 // 父类中的name是私有变量,不能直接使用,所以下边使用getName方法调用 20 // getName()在父类中自动生成带参数方法,需要删掉然后保存!!! 21 public void showInfo() { 22 //System.out.println("name=" + getName() + ";age=" + getAge() + ";birthday=" + getBirthday() + ";schooleName="+ schoolName); 23 System.out.println("name=" + getName() + ";age=" + getAge() + ";birthday=" + getBirthday() + ";schooleName="+ schoolName); 24 } 25 }
测试类
1 package a; 2 // 测试类 3 public class Demo { 4 public static void main(String[] args) { 5 // 创建对象p1,调用构造方法 6 // 此处,如果Person类中,age是无参构造方法,此处很容易忘记赋值;有参方法则必须要赋值。 7 Person p1 = new Person(18); 8 p1.setName("Jack"); 9 p1.showInfo(); 10 11 // 区分打印结果 12 System.out.println("********************************"); 13 14 Student s1 = new Student(); 15 s1.setName("Tom"); 16 s1.setSchoolName("Dalian"); 17 s1.showInfo(); 18 // 父类中的所有东西在子类中都被继承,只是部分东西限于控制符,不允许直接去用 19 } 20 }
Person类
package a; //父类 public class Person { // 为了让成员变量隐藏(封装),便于对值制定规则;否则变量会被直接赋值。 private String name; private int age; private String birthday; /* * 在子类继承后,需要在测试类中为Student类创建对象,构造方法, * 同时,子类在继承父类的成员变量时,会默认创建一个构造方法, * 此构造方法会默认调用父类的默认构造方法,然而此时父类中只有Person(int age); * 因为我们添加了一个构造方法,所以系统不会再为我们提供默认构造方法, * 所以我们在创建Student类后,需要为Person类补一个默认构造方法。 */ public Person() { // TODO Auto-generated constructor stub } // 年龄必须在构造函数中传入,因为没有set方法,私有变量不允许访问 // 如果年龄小于0,年龄就是0;否则才给age赋值 public Person(int age) { if (age<0) { this.age=0; }else { this.age=age; } } // 为了给其他用户访问变量,我们用get和set方法给变量赋值 // 为name提供get方法 public void setName(String name) { this.name=name; } public String getName() { return this.name; } // 自动生成get、set方法 // Source→ public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 题目要求方法showInfo,打印相关信息 // 可将此段代码放到前边,便于阅读,这里为了便于理解,代码按书写顺序罗列。 public void showInfo() { System.out.println("name="+name+";age="+age+";birthday="+birthday); } }
到此,此题结束。
第三部分
根据此题展开讨论
- 子类中添加变量name和父类中的name有什么关系?
- 测试类中调用的name到底是谁的?
(未完待续)
今天被虐的头昏脑涨、怀疑人生 (*T_T*)