练武场之“封装继承”攻略(未完待续)
Posted xuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练武场之“封装继承”攻略(未完待续)相关的知识,希望对你有一定的参考价值。
如题:
使用继承编写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*)
以上是关于练武场之“封装继承”攻略(未完待续)的主要内容,如果未能解决你的问题,请参考以下文章
综合运用类继承多态,完成一个公司人员管理类层次结构(未完待续)