2017.8.31学习小结 - 类的封装、继承与多态3

回顾

2.封装问题引例
3.类的封装实例
4.封装问题的总结
5.实现封装应该注意的问题

三、继承的实现

1.继承的基本概念
2.继承问题的引出
3.实现继承
4.继承的限制

学习小结

四、深度认识类的继承

1.子类对象的实例化过程

2017.8.31学习小结 - 类的封装、继承与多态3_第1张图片
package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年8月31日 下午10:03:57
 * @Description TODO 子类对象的实例化
 */
public class P297_12_10 {
    public static void main(String[] args) {
        Student2 s = new Student2();
    }
}

class Person13 {
    String name;
    int age;

    public Person13() { // 父类的构造方法
        System.out.println("******父类构造:1.public Person()");
    }
}

class Student2 extends Person13 {
    String school;

    public Student2() { // 子类的构造方法
//      super(); // 隐含了这样一句语句,他负责调用父类构造
//                  ,若显式用它则必须出现在构造方法第一句
        System.out.println("######子类构造:2.public Student()");
    }
}

运行结果:

2017.8.31学习小结 - 类的封装、继承与多态3_第2张图片
运行结果1

2.super关键字的使用

字面意思为“超级的”,因此称父类为超类(super-class)。

主要功能:完成子类调用父类中的内容,即调用父类中的属性或方法。

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年8月31日 下午10:24:11
 * @Description TODO super调用父类中的构造方法
 */
public class P299_12_11 {
    public static void main(String[] args) {
        Student3 s = new Student3("Jack",30,"HAUT");
        System.out.println("Name:" + s.name + ",Age:" + s.age 
                + ",School:" + s.school);
    }
}

class Person14{
    String name;
    int age;
    
    public Person14(String name,int age){ // 父类构造方法
        this.name = name;
        this.age = age;
    }
}

class Student3 extends Person14{
    String school;
    
    public Student3(String name,int age,String school){ // 子类的构造方法
        super(name,age); // 用super调用父类中的构造方法
        this.school = school;
    }
}

运行结果:

2017.8.31学习小结 - 类的封装、继承与多态3_第3张图片
运行结果2

调用父类中属性和方法的格式:

super.父类中的属性;
super.父类中的方法();

调用super()必须写在子类构造方法的第一行。

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年8月31日 下午10:24:11
 * @Description TODO super调用父类中的构造方法
 */
public class P299_12_12 {
    public static void main(String[] args) {
        Student4 s = new Student4("Jack", 30, "HAUT");
        System.out.println("I am from :" + s.school);
    }
}

class Person15 {
    String name;
    int age;

    public Person15() { // 父类构造方法
    }

    public String talk() {
        return "I am :" + this.name + ", I am :" + this.age + "years old";
    }
}

class Student4 extends Person15 {
    String school;

    public Student4(String name, int age, String school) { // 子类的构造方法
        // 在这里用super调用父类中的属性
        super.name = name;
        super.age = age;

        // 调用父类中的talk()方法
        System.out.println(super.talk());

        // 调用本类中的school属性
        this.school = school;
    }
}

运行结果:

2017.8.31学习小结 - 类的封装、继承与多态3_第4张图片
运行结果3

3.限制子类的访问

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年8月31日 下午11:00:10
 * @Description TODO 限制子类的访问
 */
public class P302_12_12 {
    public static void main(String[] args) {
        new Student5().setVar();
    }
}

class Person16 {
    // 在这里将属性封装
    private String name;
    private int age;
}

class Student5 extends Person16 {
    // 在这里访问父类中被封装的属性
    public void setVar() {
        name = "张三";
        age = 25;
    }
}

运行结果:

2017.8.31学习小结 - 类的封装、继承与多态3_第5张图片
运行结果4

private限制子类的访问父类的属性。

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年8月31日 下午11:14:00
 * @Description TODO 子类访问父类的私有成员
 */
public class P303_12_14 {
    public static void main(String[] args) {
        Student6 s = new Student6("Jack", 30);
        s.print();
        s.setVar("Tom", 25);
        s.print();
        // s.Test();
    }
}

class Person17 {
    // 在这里使用private将属性封装
    private String name;
    private int age;

    Person17(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 在这里设置属性值
    void setVar(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void print() {
        System.out.println("I am :" + name + ", I am :" + age + "years old");
    }
}

class Student6 extends Person17 {
    Student6(String name, int age) {
        super(name, age);
    }
    /*
     * void Test(){ // 在这里尝试访问父类中被封装的属性
     * System.out.println("I am :"+name+", I am :"+age+"years old"); }
     */
}

运行结果:

2017.8.31学习小结 - 类的封装、继承与多态3_第6张图片
运行结果5

父类自己的方法可以不受限制地访问自己的属性和方法。

思考

休息了一段时间,稍微调整了一下,算是上次脑子的缓存溢出的修整吧。生命不止,学习不息。


记于2017年8月31日夜

你可能感兴趣的:(2017.8.31学习小结 - 类的封装、继承与多态3)