重写与覆盖(override)
一、 什么是重写(覆盖)?
方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法。
提示:以下是本篇文章正文内容,下面案例可供参考
二、重写(覆盖)的使用
现在创建三个类来演示方法重写的情况:Override01、Animal、Dog,其中Dog类继承Animal类。
Override01类
public class Override01{
public static void main(String[] args){
Dog dog = new Dog();
}
}
Animal类
public class Animal{
public void cry(){
System.out.println("动物类");
}
}
Dog类
public class Dog extends Animal{
public void cyr(){
System.out.println("狗类");
}
}
因为Dog是Animal子类,所以Dog的cry方法和Animal的cry定义形式一样(名称、返回类型、参数),这时我们就说Dog的cry方法是重写了Animal的cry方法。
现在在Override01类中调用Dog类:
public class Override01{
public static void main(String[] args){
Dog dog = new Dog();
dog.cry();
}
}
输出的结果为Dog类中的信息:“狗类”
如果把Dog类中的cry注释掉,那么通过Override01类原封不动的输出,得到的结果变成了Animal中的信息:“动物类”
三、Override的注意事项
● 注意事项与使用细节
方法重写也叫方法覆盖,需要满足下面的条件:
- 子类的方法的形参列表、方法名称,要和父类的方法的形参列表,方法名称完全一致
- 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类。
【比如 : 父类 返回类型是 Object,子类方法返回类型是String】 - 子类方法不能缩小父类方法的访问权限,必须大于或等于父类的访问权限级别。
- 访问权限级别:public > protected > 默认 > prvate
四、overload与override的区别
名称 | 发生范围 | 方法名 | 形参 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
重载(overload) | 本类 | 必须一样 | 类型,个数或者顺序至少有一个不同 | 无要求 | 无要求 |
重写(override) | 父子类 | 必须一样 | 相同 | 子类重写的方法,返回的类型必须和父类一致,或者是其子类型 | 子类方法不能缩小父类方法的访问范围 |
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
练习
- 编写一个Person类,包括属性 / private(name、age),构造器、方法say(返回自我介绍的字符串)。
- 编写一个Student类,继承Person类,增加id、score属性 / private,以及构造器,定义say方法(返回自我介绍的信息)
- 在mian中,分别创建Person和Student对象,调用say方法输出自我介绍
代码实现
Person类
public class Person {
private String name;
private int age;
public String say(){
return name + "今年"+age+"岁";
}
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;
}
}
Student类
public class Student extends Person{
private int id;
private int score;
public String say(){
return super.say() + " id是" +id+ " score =" +score;
}
public Student(String name, int age,int id,int score) {
super(name, age);
this.id = id;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
Test类
public class test {
public static void main(String[] args) {
Person ps = new Person("张三",18);
System.out.println(ps.say());
Student st = new Student("李四",18,1,100);
System.out.println(st.say());
}
}
运行效果