方法重载
在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载(method overloading)。
参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。
1. 方法重载的规则
- 方法名称必须相同。
- 参数列表必须不同。
- 方法的返回类型可以相同也可以不相同。
- 仅仅返回类型不同不足以称为方法的重载。
2. 方法重载的注意事项
- 参数类型的自动转换。即当参数个数与顺序相同,方法执行时无法找到与传递参数完全相同的类型时,可按照自动隐式转换规则匹配相应的方法。
package com.wang.Method;
public class Method_Overload {
public static void main(String[] args) {
byte b=10;
test(b);
}
public static void test(short s){
System.out.println("sssss");
}
public static void test(char c){
System.out.println("ccccc");
}
public static void test(int i){
System.out.println("iiiiii");
}
}
- 当参数个数与顺序相同,方法执行时无法找到与传递参数完全相同的类型时,若父类型对应的方法存在,则可执行此方法
public class Method_Overload {
public static void main(String[] args) {
User1 user = new User1();
test(user);
}
public static void test(Person person) {
System.out.println("person...");
}
// public static void test(User1 user1) {
// System.out.println("user1...");
// }
}
class Person {
}
class User1 extends Person {
}
执行结果
- 不能通过访问权限、返回类型、抛出的异常进行重载。
- 跟成员方法一样,构造方法也可以重载。
方法重写
子类中出现和父类中一模一样的方法(方法名,参数列表)
1. 方法重写的规则
- 方法签名-----子类中的重写方法的方法签名与父类被重写的方法方法签名完全相同
- 返回值类型------基本数据类型完全相同 引用数据类型 : 子类 <= 父类
- 权限修饰符 ------子类的权限修饰符>=父类
权限修饰符 : private < 默认(什么都不写) < protected < public
2. 注意事项
- 被private修饰的方法不能被重写
- 被final修饰的方法不能被重写
- 被static修饰的方法不能被重写
- 动态绑定。
public class Method_override {
public static void main(String[] args) {
Person2 user = new User2(); // 多态
System.out.println(user.sum());
}
}
class Person2 {
public int i = 10; // 父类的i
public int sum() {
return getI() + 10;
//return i + 10;
}
public int getI() {
return i;
}
}
class User2 extends Person2 {
public int i = 20;//当前类的i
@Override
public int getI() {
return i;
}
}
如上程序,执行sum方法时,会调用getI方法,由于动态绑定,执行的getI方法时User2提供的,因此结果应该为30