一、基本介绍
方法覆盖即子类有一个方法,与父类(或更上一级的父类)的某个方法的名称、参数、返回类型一样,那么我们就说子类的整个方法覆盖了父类的方法(有继承关系是重写的前提)
二、快速入门案例
//父类
public class Animal {
public void cry(){
System.out.println("动物cry");
}
}
//子类
public class Dog extends Animal{
//因为Dog是Animal的子类,
//且Dog的cry方法与Animal的cry方法名称、返回类型、参数一样
//因此构成了方法重写
public void cry(){
System.out.println("狗叫");
}
}
//main
public class Override01 {
public static void main(String[] args) {
//演示方法重写的情况
Dog dog = new Dog();
//调用的是Dog类的cry方法
dog.cry();
}
}
三、使用细节
1、子类方法的形参列表、方法名称必须和父类方法形参列表、方法名称完全一致
2、子类方法的返回类型和父类方法的返回类型一样、或者是父类返回类型的子类
比如、父类返回类型是 Object,子类返回类型是String,(String是Object的子类)
3、子类方法不能缩小父类方法的访问权限
比如,父类方法是默认修饰符,子类是public,这样是对的,但是反过来就会缩小父类的访问 权限
四、方法重写(override)和方法重载(overload)的区别
五、练习
//super.say() 调用父类方法
package com.lmdedu.override;
public class OverrideExercise {
public static void main(String[] args) {
Person person = new Person("Jack",10);
System.out.println(person.say());
student jack = new student("jack",10,"6666",3.25);
System.out.println(jack.say());
}
}
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String say(){
return "我是" + name + "\t" + "年龄" + age;
}
}
class student extends Person{
private String id;
private double score;
public student(String name, int age, String id, double score) {
super(name, age);
this.id = id;
this.score = score;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String say(){//super.say() 调用父类方法
return super.say() + "id为" + id + "\t" + "成绩为" + score;
}
}