ava的方法重载和方法重写有什么区别?举个例子?

来源:百度知道 编辑:UC知道 时间:2024/05/07 06:56:23

重载是同名方法可以接收不同类型、个数或者返回不同类型的值,方法的重载在一个类中实现

方法重写是要有继承关系的,子类继承了父类的方法,但是这个方法可以与父类的同名方法完全不一样

总的来说,区别就是一个不存在继承关系,一个存在继承关系

重写的主要优点是能够定义子类特有的特征:
如:
public class Father{
public void speak(){
System.out.println("Father");
}
}
public class Son extends Father{
public void speak(){
System.out.println("son");
}
}

这也叫做多态性,重写方法只能存在于具有继承关系的类中,重写方法只能重写父类非私有的方法,当上例中Father类的speak()方法为private时,Son类不能重写speak()方法,此时在Son类中定义的speak()方法相当于一个新的方法,与Father中的speak()方法没有任何关系.
当Father类的speak()方法声明为final时,无论该方法的修饰符是public,protected还是默认,Son类根本不能重写speak()方法,试图编译代码时,编译器会报错.例:
public class Father{
final void speak(){
System.out.println("Father");
}
}
public class Son extends Father{
public void speak(){
System.out.println("son");
}
}//编译器错误信息:Son 中的 speak() 无法覆盖 Father 中