一. 重写的含义:
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
1.子类能够根据需要实现父类的方法。
2.重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
//总结为以下三点:
//"==":方法名,形参列表相同
//“≤”:返回类型和声明异常类型,子类小于等于父类
//“≥”:访问权限,子类大于等于父类
super关键字:
1、 通过super关键字可以使用父类的内容
2、 super代表父类的一个引用对象
3、 如果用,必须出现在调用位置的第一行
4、 不管父类无参构造写没写,子类构造无参里都有super,隐式了 。一般都要写无参构造,方便。
如果父类没有写无参构造,子类的构造函数里必须写 super(参数)
super 关键字的使用
示例一 不使用 super 关键字
public class TestOverride {
public static void main(String[] args) {
Horse h1=new Horse();
Horse h2=new Horse();
h1.run(); //此时被有效调用的是子类的 run 方法
//h1.run(1); //此时被有效调用的是父类的 run 方法 //实际参数只要是整数都可以
h2.stop();
}
}
class Vehicle {
public void run(int a){ //父类的有参 run 方法-->此时需要子类无参
System.out.println("跑得快!");
}
public void stop(){
System.out.println("停止!");
}
}
class Horse extends Vehicle{
public void run() { //无参 //正确
//public void run(int a) { //有参 //子类重写父类 run 方法错误
System.out.println("春风得意马蹄疾");
}
public void stop() {
System.out.println("停了!");
}
}
运行结果
春风得意马蹄疾
//跑得快!
停了!
示例二 使用 super 关键字
public class TestOverride {
public static void main(String[] args) {
Horse h1=new Horse();
Horse h2=new Horse();
h1.run(1);//此时子类和父类的 run 方法均被调用
h2.stop();
}
}
class Vehicle {
public void run(int a){
System.out.println("跑得快!");
}
public void stop(){
System.out.println("停止!");
}
}
class Horse extends Vehicle{
public void run() { //无参 //正确
//super(); //可以不写,不写也会调用父类的无参构造 //调用父类的无参构造,隐式的,写则必须放在第一行
System.out.println("春风得意马蹄疾");
super.run(a); //使用父类的内容
}
public void stop() {
System.out.println("停了!");
}
}
//运行结果
春风得意马蹄疾
跑得快!
停了!
一. 重载的含义:
方法重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表( 参数数量 , 参数类型 , 参数顺序);重载是一个类中多态性的一种表现
Overload和Override的区别(重载与重写的区别)
1、目的不同
overload用于增加程序的可读性(做法不同,但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。
2、范围不同
overload 在相同的类范围内内执行,是一个类中多态性的一种表现。 override发生在两类具有继承(继承)的关系,是父类与子类之间多态性的一种表现。
3、参数不同
overload参数 必须不同。 override参数 必须相同。