回顾
四,深度认识类的继承
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;
}
}
运行结果:
如何调用已经覆写的父类的方法呢?
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;
}
}
运行结果:
覆写注意事项:
①.覆写的方法的返回值类型必须和被覆写的方法的返回值类型一致;
②.被覆写的方法(子类)不能为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日夜