一、方法的重写
对于一个方法而言:
区分方法是通过方法名找方法 通过参数列表来确定方法
方法重写:
发生继承关系、实现关系 父类不满足子类的需求 子类重写父类中的方法
什么情况下会发生重写?
1:发生继承
2:方法名同名
3:参数列表要一模一样 (顺序 个数 类型)
4:子类的返回值类型<=父类的返回值类型(引用) 基本类型一模一样
5:子类的修饰符>=父类的修饰符 (父类中的修饰符不能是private)
6:子类抛出的异常<=父类抛出的异常 (理解:可以认为任意一个方法都会对外抛出运行时异常)
口诀:参一反小修大异小
在重写方法的上一行加入@Verride可验证是否为重写方法
示例:
package com.mage.quntao.io;
public class F {
public String name;
public String age;
public F() {
}
public void eat() {
System.out.println("爱吃蔬菜");
}
}
class Child extends F{
public String hobit;
public Child(){
}
@Override
public void eat() {
System.out.println("爱吃肉,爱打游戏");
}
public void eat(int num) {
System.out.println("每顿要吃"+num+"碗饭");
}
}
二、方法的重载
在一个类当中编写方法的时候,多个方法其实所做的事情是一样的
为了契合方法起名要见名知意,方法名称可以一样。
在一个类中定义同名方法是可以的,称之为重载。
2同
同类 、同名
3不同
参数列表长度不同 、 参数列表类型不同 、 参数列表顺序不同
/** 重载方法的面试题
以下程序中输出什么内容
如果程序中的重载方法,都没有完全符合的。
但是存在多个能够调用的方法时,程序会报错
*/
public class Demo08{
public static void main(String[] args){
info(12,12.1f);
}
public static void info(char ch,double d){
System.out.println("info char ch,double d");
}
public static void info(int ch,double d){
System.out.println("int ch,double d");
}
public static void info(long ch,float d){
System.out.println("long ch,float d");
}
}
三、方法重写和方法重载的区别
1、方法重写需要有继承关系,重载不需要·
2、方法重写参数列表要相同,重载的话参数列表要不同
3、方法重载不管返回值,重写方法子类的返回值类型<=父类的返回值类型。
4、方法重写子类的修饰符>=父类的修饰符 (父类中的修饰符不能是private),方法重载则不作要求
5、方法重写子类抛出的异常<=父类抛出的异常 (理解:可以认为任意一个方法都会对外抛出运行时异常),