练武场之“封装继承”攻略(未完待续)

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*) 

以上是关于练武场之“封装继承”攻略(未完待续)的主要内容,如果未能解决你的问题,请参考以下文章

源码分析之ArrayList(未完待续,写到了274行)

综合运用类继承多态,完成一个公司人员管理类层次结构(未完待续)

Linux Framebuffer驱动框架之二软件架构(未完待续)

面向对象之元类介绍(未完待续)

ArrayList 源码分析(未完待续)

Shell编程之三 —— shell script 脚本(未完待续)