方法覆盖(重写)
介绍
方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。
细节
(1)子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一致。
(2)子类方法的返回类型和父类方法的返回类型一样,或者是父类返回类型的子类。
比如:父类方法的返回类型是Object,子类方法的返回类型是String。但如果父类方法的返回类型
是String,子类方法的返回类型是Object就会报错,因为Object不是String的子类。
(3)子类方法不能缩小父类方法的访问权限。
即:public -> protected -> 默认 -> private
案例演示
编写父类Animal,并编写一个子类Dog来继承Animal
public class Override01 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.cry();
}
}
public class Animal {
public void cry() {
System.out.println("哈士奇。。。");
}
}
public class Dog extends Animal{
//因为Dog是Animal类的子类
//Dog的cry方法和Animal的cry定义形式一样(名称、返回类型、参数)
//这时我们就说Dog的cry方法重写了Animal的cry方法
public void cry() {
super.cry();
System.out.println("吃骨头。。。");
}
}
查看输出结果:
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
重载(overload) | 本类 | 必须一样 | 类型、个数或者顺序至少有一个不同 | 无要求 | 无要求 |
重写(override) | 父子类 | 必须一样 | 相同 | 子类重写的方法,返回的类型和父类方法返回的类型一致,或者是其子类 | 子类方法不能缩小父类方法的访问范围 |
练习
1.编写一个Person类,包括属性/private(name、age),构造器,方法say(返回自我介绍的字符串)
2.编写一个Student类,继承Person类,增加id、score属性/private,以及构造器,定义say方法(返回自我介绍的信息)
3.在main中,分别创建Person和Student对象,调用say方法输出自我介绍
编写一个Person类,包括属性/private(name、age),构造器,方法say(返回自我介绍的字符串)
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String say() {
return "name=" + name + " age=" + age;
}
}
编写一个Student类,继承Person类,增加id、score属性/private,以及构造器,定义say方法(返回自我介绍的信息)
public class Student extends Person{
private String id;
private double score;
public Student(String name, int age, String id, int score) {
super(name, age);
this.id = id;
this.score = score;
}
public String say() {
return super.say() + " id=" + id + " score=" + score;
}
}
在main中,分别创建Person和Student对象,调用say方法输出自我介绍
public class OverrideExercise {
public static void main(String[] args) {
Person person = new Person("周小末",18);
System.out.println(person.say());
Student student = new Student("周小末",18,"小末",100);
System.out.println(student.say());
}
}
- 点赞
- 收藏
- 关注作者
评论(0)