2017.9.5学习小结 - 类的封装、继承与多态4

回顾

四,深度认识类的继承

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

2.super关键字的使用

3.限制子类的访问

学习小结

五、覆写

“覆写(Override)”的概念与“重载(Overload)”有相似之处。

1.方法的覆写

当一个子类继承一个父类,如果子类中的方法与父类中的方法的名称、参数个数及类型且返回值类型等都完全一致时,就称子类中的这个方法覆写了父类中的方法。同理,属性也可覆写。

class Super{ //父类
返回值类型 方法名(参数列表){
  }
}
class Sub extends Super{ // 子类
返回值 方法名(参数列表) // 与父类的方法同名,覆写父类中的方法
}

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:27:03
 * @Description TODO 子类覆写父类的实现
 */
public class P306_12_15 {
    public static void main(String[] args) {
        Student7 s = new Student7("Jack", 25, "HAUT");
        // 此时调用的是子类中的talk()方法
        System.out.println(s.talk());
    }
}

class Person18 {
    String name;
    int age;

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

class Student7 extends Person18 {
    String school;

    public Student7(String name, int age, String school) {
        // 分别为属性赋值
        this.name = name; // super.name = name
        this.age = age; // super.age = age
        this.school = school;
    }

    // 此处覆写Person中的talk()方法
    public String talk() {
        return "I am from " + this.school;
    }
}

运行结果:

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

如何调用已经覆写的父类的方法呢?

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:27:03
 * @Description TODO super调用父类的方法
 */
public class P307_12_16 {
    public static void main(String[] args) {
        Student8 s = new Student8("Jack", 25, "HAUT");
        // 此时调用的是子类中的talk()方法
        System.out.println(s.talk());
    }
}

class Person19 {
    String name;
    int age;

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

class Student8 extends Person19 {
    String school;

    public Student8(String name, int age, String school) {
        // 分别为属性赋值
        this.name = name; // super.name = name
        this.age = age; // super.age = age
        this.school = school;
    }

    // 此处覆写Person中的talk()方法
    public String talk() {
        // 调用父类的talk()
        return super.talk() + "I am from " + this.school;
    }
}

运行结果:

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

覆写注意事项:

①.覆写的方法的返回值类型必须和被覆写的方法的返回值类型一致;

②.被覆写的方法(子类)不能为static;

③.被覆写的方法不能拥有比父类更为严格的访问控制权限。

访问权限大小:

私有(private)<默认(default)<公有(public)

2.属性的覆写

所谓的属性覆盖指的是子类定义了和父类之中名称相同的属性。

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2017年9月5日 下午10:59:08
 * @Description TODO 属性(数据成员)的覆写
 */
public class P309_12_17 {
    public static void main(String[] args) {
        ComputerBook cb = new ComputerBook(); // 实例化子类对象
        cb.print();
    }
}

class Book2 {
    String info = "Hello World.";
}

class ComputerBook extends Book2 {
    int info = 100; // 属性名称与父类相同

    public void print() {
        System.out.println(info);
        System.out.println(super.info);
    }
}

运行结果:

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

思考

每天进步一点点,真的可以达到预期效果吗,现在虽然还达不到每天,但我还是坚持着,有时间还是得坚持下去。还需要两天,这章也可以搞定啦。


记于2017年9月5日夜

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