目录
一、方法重载
1.1概念
方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
多个方法在同一个类中
多个方法具有相同的方法名
多个方法的参数不相同,类型不同或者数量不同
1.2特点
重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
1.3直观代码
错误格式:
public class MethodDemo {
public static void fn(int a) {
//方法体
}
public static int fn(int a) {
//方法体
}
}
public class MethodDemo01 {
public static void fn(int a) {
//方法体
}
}
public class MethodDemo02 {
public static int fn(double a) {
//方法体
}
}
1.虽然MethodDemo类中两个方法体的返还值不同,但是方法重载与其无关,只和是否在同一个类中,是否具有相同的方法名,是否参数不相同,类型不同或者数量不同有关!
2.MethodDemo类中两个方法体不在同一个类中!
正确格式:
public class MethodDemo {
public static void fn(int a) {
//方法体
}
public static int fn(double a) {
//方法体
}
}
public class MethodDemo {
public static float fn(int a) {
//方法体
}
public static int fn(int a , int b) {
//方法体
}
}
二、方法重写(方法覆盖)
2.1概念
方法重写概念
子类出现了和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)
方法重写又称方法覆盖。
2.2 应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
简单来说就是子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
2.3注意事项
私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(public > 默认 > 私有)
2.4直观代码
public class Fu {
private void show() {
System.out.println("Fu中show()方法被调用");
}
void method() {
System.out.println("Fu中method()方法被调用");
}
}
public class Zi extends Fu {
@Override
private void show() {
System.out.println("Zi中show()方法被调用");
}
@Override
private void method() {
System.out.println("Zi中method()方法被调用");
}
@Override
public void method() {
System.out.println("Zi中method()方法被调用");
}
}
注意:1.子类Zi在 重写private void show() 方法时编译出错,这是父类私有的方法。上面讲过【私有方法不能被重写(父类私有成员子类是不能继承的)】
2.子类Zi在重写private void method() 方法时编译出错,访问权限不够。子类重写父类方法的时候,访问权限需要大于等于父类。【子类方法访问权限不能更低(public > 默认 > 私有)】
三、两者的比较
重载:(重载是一个类中多态性的表现,在编译时起作用(静态多态性))
- 必须具有不同的参数列表;
- 可以有不同的返回类型;
- 可以有不同的访问修饰符;
重写:(父类与子类之间多态性的表现,在运行时起作用(动态多态性))
- 参数列表必须完全与被重写的方法相同,否则不能称其为重写;
- 返回类型必须一直与被重写的方法相同,否则不能称其为重写;
- 访问修饰符的限制一定要大于等于被重写方法的访问修饰符;