方法重载:
Java面向对象 ,所谓重载就是对一个类中的方法进行编辑,并且只考虑参数结构,即如果方法名相同,参数结构不同,就实现了方法的重载,(就好比你去吃苹果,一个使用刀削着皮吃,需要用到水果刀,而另一个则是直接吃,什么都不用,所以就会出现同样是吃苹果,但是会有不同的吃法)下面是一个简单的两个数相加跟三个数相加的方法的重载,并且返回他们的和。
具体使用的口诀:
总结为:“两同一不同”
两同:同一个类、相同的方法名
一不同:参数列表不同。① 参数个数不同 ② 参数类型不同
注意:方法的重载与形参的名、权限修饰符、返回值类型都没有关系。
public class Apple {
public void eatApple(){
System.out.println("直接吃苹果"); //定义吃苹果的方法
}
public void eatApple(String knife){ //重载吃苹果的方法
System.out.println("用"+knife+"吃苹果");
}
public static void main(String[] args) {
Apple apple = new Apple();
apple.eatApple(); //调用直接吃苹果的方法
apple.eatApple("水果刀"); //调用含参数String引用数据类型的knife的吃苹果方法
}
}
/*
编辑实现对双操作数和三操作数加法运算的重载
*/
public class OverLoad{
public int sum(int a,int b){ //定义双操作数的sum方法
return a+b;
}
public int sum(int a,int b,int c){ //重载的三操作数sum方法
return a+b+c;
}
public static void main(String [] args){
OverLoad o = new OverLoad();
System.out.println(o.sum(1,5)); //调用双操作数sum方法
System.out.println(o.sum(3,5,8)); //调用三操作数sum方法
}
}
/*
运行结果:
6
16
*/
方法的重写:
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对集成的方法进行一些修改,即对父类的方法进行重写。在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表和返回值类型,且在子类重写的方法不能拥有比父类方法更加严格的访问权限。
方法重写应遵循的规则 方法声明的格式:权限修饰符 返回值类型 方法名(形参列表) [throws 异常类型] { //方法体 } 具体规则: ① 父类被重写的方法与子类重写的方法的方法名和形参列表必须相同。 ② 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符 > 子类不能重写父类中声明为private权限修饰的方法。 ③ 关于返回值类型: > 父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型必须是void > 父类被重写的方法的返回值类型是基本数据类型,则子类重写的方法的返回值类型必须与被重写的方法的返回值类型相同。 > 父类被重写的方法的返回值类型是引用数据类型(比如类),则子类重写的方法的返回值类型可以与被重写的方法的返回值 类型相同 或 是被重写的方法的返回值类型的子类 ④ 子类重写的方法抛出的异常类型可以与父类被重写的方法抛出的异常类型相同,或是父类被重写的方法抛出的异常类型的子类
下面是一个简单的例子:
//定义Animal类
public class Animal {
public void shout (){ //定义动物叫的方法
System.out.println("动物发出叫声");
}
}
//定义Dog类继承Animal类
class Dog extends Animal{
@Override
public void shout() {
System.out.println("狗汪汪叫");//重写父类Animal中的shout()方法
}
}
//定义测试类
class Test{
public static void main(String[] args) {
Dog dog = new Dog(); //创建Dog实例对象
dog.shout(); //调用Dog类重写的shout()方法
}
}
面试题:区分方法的重载(overload)与重写(override / overwrite) 重载:“两同一不同” 重写:继承以后,子类覆盖父类中同名同参数的方法