在java的学习中我们经常会遇到方法的重写和重载。这篇博客将介绍java中的重写和重载。
一重载(overload)
百度百科:在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。
个人理解:其实意思就是说在一个类中有多个相同名称的方法,但是参数不同,不同的方式可以是个数不同、可以是类型不同、或者是两者均不同均可。返回类型是否相同没有任何妨碍。外界在调用这个类的的方法,要让我们知道是调用的那个方法,能够将这些方法区分开。
二 重写(overwrite/override)
百度百科:
通常,派生类
继承基类
的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.
例如,假设动物类存在"跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法.
个人理解:重写是以继承为前提的。重写的是神马?重写的是父类的方法,既然是重写别人的方法,那么方法名、参数和返回类型就必须相同。为什么要使用重写?子类继承父类,也就意味着子类拥有了父类的所有方法和属性。但是子类对父类的这个方法并不是很满意,想要进行修改,怎么办?那就使用重写了。
我们在调用子类的方法的时候,程序先调用父类的这个方法,如果子类重写此方法则执行子类的方法,如果子类没有此方法(前提是父类有),则执行父类原来的方法。总之,子类继承了父类中所有的属性和方法。
注意:1 重写方法的必须和被重写方法具有相同方法名称、参数列表和返回类型。
2 重写父类方法不能使用比重写方法更严格的方法权限
三重写重载示例
代码
class Father{
public void func1(){
func2();
}
//这是父类中的func2()方法,因为下面的子类中重写了该方法
//所以在父类类型的引用中调用时,这个方法将不再有效
//取而代之的是将调用子类中重写的func2()方法
public void func2(){
System.out.println("AAA");
}
public void func3(){
System.out.println("fulei");
}
}
class Child extends Father{
//func1(int i)是对func1()方法的一个重载,func1()继承自父类,虽然程序中没有显示。
public void func1(int i){
System.out.println("BBB");
}
//子类重写父类func2方法。
public void func2(){
System.out.println("CCC");
}
}
public class Test {
public static void main(String[] args) {
Father child = new Child();
//Child littlebaby = new Father();
child.func1(); //结果CCC //调用子类中继承的方法
child.func2(); //结果CCC //子类重写父类方法
Father baba = new Father();
baba.func2(); //结果AAA //实例化父类,直接调用父类的方法
Child baby = new Child();
baby.func1(68); //结果BBB //调用子类中的方法
baby.func1(); //结果CCC //调用子类中的重写的方法
baby.func3(); //结果fulei //调用子类继承的方法。
}
}
四总结
重载必须是在一个类中的的多个方法;重写必须以继承为前提,也就是说最少2个类。重载是一个类中多态性的表现,重写是父类和子类之间的一种多态性的表现。重载在编译时检测,重写在执行时执行。
在看完了J2SE视频之后,真切的感受到了java是一种面向对象的语言。一切的根源都来自于"Object"。都是从它继承而来。多态性是面向对象语言的特点,而重写是实现多态的基础。