0004方法的重写Override
原创
©著作权归作者所有:来自51CTO博客作者wx632a61a65e0a1的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、概述
/*
- 方法的重写:Override
*当子类继承了父类的方法时,但是父类的方法体不适用于子类了,那么子类可以选择进行“重写overwrite”。 - 方法 = 方法签名/方法头 + 方法体
- 重写有要求:
- (1)方法名:必须和父类被重写的方法名“相同”
- (2)形参列表:必须和父类被重写的形参列表“相同”
- (3)返回值类型:
- 基本数据类型和void:要求与父类被重写的方法的返回值类型“相同”
- 引用数据类型:要求子类重写的方法的返回值类型 <= 父类被重写的方法的返回值类型
- 例如:
- 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Student
- 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Person
- 子类方法的返回值类型是Person,父类被重写方法的返回值类型是Student(错误的)
- (4)修饰符
- ①权限修饰符:子类重写的方法的权限修饰符的可见性范围 >= 父类被重写方法的权限修饰符的可见性范围
- 例如:
- 子类方法的权限修饰符是public,父类被重写方法的权限修饰符public
- 子类方法的权限修饰符是public,父类被重写方法的权限修饰符protected
- ②其他修饰符(后面讲)
*/
啥也不说了,贴代码,便能好好体会到了(坏笑)
package com.atguigu.test02;
/*
* 方法的重写:Override
*当子类继承了父类的方法时,但是父类的方法体不适用于子类了,那么子类可以选择进行“重写overwrite”。
* 方法 = 方法签名/方法头 + 方法体
* 重写有要求:
* (1)方法名:必须和父类被重写的方法名“相同”
* (2)形参列表:必须和父类被重写的形参列表“相同”
* (3)返回值类型:
* 基本数据类型和void:要求与父类被重写的方法的返回值类型“相同”
* 引用数据类型:要求子类重写的方法的返回值类型 <= 父类被重写的方法的返回值类型
* 例如:
* 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Student
* 子类方法的返回值类型是Student,父类被重写方法的返回值类型是Person
* 子类方法的返回值类型是Person,父类被重写方法的返回值类型是Student(错误的)
* (4)修饰符
* ①权限修饰符:子类重写的方法的权限修饰符的可见性范围 >= 父类被重写方法的权限修饰符的可见性范围
* 例如:
* 子类方法的权限修饰符是public,父类被重写方法的权限修饰符public
* 子类方法的权限修饰符是public,父类被重写方法的权限修饰符protected
* ②其他修饰符(后面讲)
*
*/
public class TestOverride {
public static void main(String[] args) {
Manager m= new Manager();
m.setName("张无忌");
System.out.println(m.getSalary());
//第2个例子
Manager m1= new Manager("张无忌2",8000,2000);
System.out.println(m1.getInfo());
}
}
//员工
class Employee{
//属性列表
private String name;
private double salary;
//构造器列表
public Employee(){
}
public Employee(String name,double salary){
this.name=name;
this.salary=salary;
}
//get/set
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
//------------------------
public double getSalary(){
return this.salary;
}
public void setSalary(double salary){
this.salary=salary;
}
//方法
public String getInfo(){
return "姓名:"+name+" ,薪资:"+salary;
}
}
//经理
class Manager extends Employee{
//子类的属性列表
private double bonus; //奖金
//子类的构造器列表
public Manager() {
}
public Manager(String name,double salary,double bonus) {
super(name,salary);//如果这里不写super(name,salary)的话,它就会报错,找不到父类的有参构造
this.bonus = bonus;
}
//get/set
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
//重点来了:重写父类的getInfo()
//重写父类的getInfo()
public String getInfo(){
//由于父类的name和salary属性是私有的,不能在子类中直接使用的
return "姓名:"+getName()+" 薪资:"+getSalary()+" 奖金:"+ bonus;
}
}
# 二、总结
## 整理重写的要求:
(1)方法名:相同
(2)形参列表:相同
(3)返回值类型:
基本数据类型与void:相同
引用数据类型:<=
(4)修饰符
权限修饰符:>=
其他修饰符:不能是final,private,static
(5)抛出的异常类型:<=