目录
(一)方法重载
(1):什么是方法重载?
定义:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数——百度百科
(2):为什么要有方法重载?
public class Overloading {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = addInt(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = addDouble(a2, b2);
System.out.println("ret2 = " + ret2);
}
public static int addInt(int x, int y) {//int类型参数的方法
return x + y;
}
public static double addDouble(double x, double y) {//double类型的方法
return x + y;
}
}
上面是一段简单的代码,如果方法中传入的类型参数类型不同,就要调用不同的方法,这样确实能解决问题,但却要提供许多不同的方法名,比如如果我传入的一个参数是int类型,一个参数是double类型,就还需要创建第三个方法,这无疑是非常麻烦的,所以就需要用方法重载来解决这个问题。
(3)方法重载用法
public class Overloading {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
double ret3 = add(a,a2);
System.out.println("ret3 = " + ret3);
}
public static int add(int x, int y) {//int类型参数的方法
return x + y;
}
public static double add(double x, double y) {//double类型的方法
return x + y;
}
public static double add(int x, double y){//int与double类型的方法
return x+y;
}
}
如以上代码,虽然调用的方法名相同,但因传入的参数类型不同,所以就构成了方法的重载
(4):方法重载是怎么实现的?(方法签名)
在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就 可以定义方法名相同的方法呢?答案就是方法签名。
方法签名:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成 方法完整的名字。
如图中是我将代码编译后,使用javap汇编工具来查看,发现,三个方法的名称是不同的
(二)方法重写
(1)什么是方法重写?
定义:重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程 进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要定义特定 于自己的行为, 也就是说子类能够根据需要实现父类的方法。
(2)方法重写用法
定义一个父类Animal
public class Animal {//父类Animal定义了,有一个eat方法
public void eat() {
System.out.println("吃饭");
}
}
子类dog继承父类Animal,未重写父类方法
public class Dog extends Animal{//子类dog继承父类Animal
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
}
}
未重写父类eat方法输出结果
子类dog继承父类Animal,重写父类方法
public class Dog extends Animal{
@Override
public void eat() {//重写父类eat方法
System.out.println("狗吃骨头");
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
}
}
重写父类eat方法后输出结果
(三)方法重写与方法重载特性对比
1:重载发生在同一个类中,重写发生在父子类之间。
2:重载要求方法的参数列表必须不同,而重写的参数列表必须与被重写的方法完全相同。
3:重写方法的返回类型必须与被重写方法的方法相同或为其子类型,重载方法的返回类型可以不同。
4:重写的方法的访问权限不能比被重写的方法更严格