前言
在java中经常会在代码里面看到一个方法被多次使用,而每次使用的时候都要再写一遍方法,这大大降低了我们写代码的速度,所以在java中引进了方法重载和方法重写,方法重写主要是父子类之间的。
一、方法重载和方法重写的区别
1.方法重载:方法名相同 add 参数列表不同(int a,int b) 返回值不作要求(可以不是同一个类 继承关系上也可以),与访问修饰符无关
2.方法重写的规则:方法名相同,参数类表相同 ,返回值相同,必须在父子类的情况下。重写时 方法不能是静态的 子类的访问限定修饰符一定要大于父类的
访问权限:(public>protected>default>private(private不能修饰重写) ) 被final修饰的不能被重写(返回值有时候可以不同 必须是父子类型的(协变类型也构成重写))
3.为避免方法重写写错,在方法上面加上一个@Override 提示这是一个方法重写
二、方法重载的实现
具体使用哪一个在运行过程中编译器会根据参数列表的输入值来判断使用哪个方法的:
public class Main {
public static void main(String[] args) {
int a1 = 10;
int b1 = 20;
int c1 = 30;
double a2 = 10.2;
double b2 = 4.5;
System.out.println(add(a1,b1));
System.out.println(add(a2,b2));
System.out.println(add(a1,b1,c1));
}
public static int add(int a,int b){
return a + b;
}
public static int add(int a,int b,int c){
return a + b + c;
}
public static double add(double a,double b){
return a + b;
}
}
三、方法重写的实现
重写父类中的方法
class Shape {
public void draw() {
System.out.println("shape");//写了其实对 子类无影响
}
}
class Rect extends Shape{
public void draw() {
System.out.println("♦");
}
}
class Flower extends Shape{
@Override
public void draw() {
System.out.println("花朵");
}
}
class Triangle extends Shape{
@Override
public void draw() {
System.out.println("△");
}
}
public class Test {
public static void main1(String[] args) {
Shape shape1 = new Rect();
shape1.draw();
}
}
总结
总而言之,方法重载和方法重写在java中都是蛮常见的,,也挺重要的,所以这里一定要懂哦!!