方法重写
前提
需要有继承关系,子类重写父类的方法
要求
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大,但不能缩小;public > protected > default > private
- 抛出的异常:范围可以被缩小,但不能被扩大
子类的方法和父类必须要一致,方法体不同
为什么要重写
父类的功能,子类不一定需要,或者不一定满足
多态
笔记
代码演示
package oop.demo04;
public class Person {
public void run() {
System.out.println("跑起来");
}
}
package oop.demo04;
public class Student extends Person{
@Override
public void run() {
System.out.println("早上跑操");
}
public void eat(){
System.out.println("去食堂吃饭");
}
}
package oop.demo04;
public class Application {
public static void main(String[] args) {
//一个对象的实际类型是确定的
//可以指向的引用类型就不确定了:父类的引用可以指向子类
// Student 子类的方法都是自己的,或者继承父类的
Student s1 = new Student();
//Person 可以指向子类,但是不能调用子类独有的方法
Person s2 = new Student();
Person p1 = new Person();
Object s3 = new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
s1.run();
s2.run();//子类重写了父类的方法,执行子类重写后的方法
//如果子类和父类都有同一种方法,且子类没有对其进行重写,则会调用父类的方法
p1.run();
s1.eat();
/*
早上跑操
早上跑操
跑起来
去食堂吃饭
*/
}
}
多态注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系才可以转换,否则会报类型转换异常 ClassCastException
- 存在条件:要有继承关系,且子类方法重写,父类引用指向子类对象 Father f1 --> Son();
补充
- static 方法属于类,不属于实例,无法被重写
- final 常量,在常量池类,无法被重写
- private 私有,也无法被重写,没有重写就没有多态