重写和重载的区别_重写和重载的不同之处
重写和重载的区别_重写和重载的不同之处
在Java中,重写和重载都是Java多态性的两种不同表现形式,这两者之间的区别是人们好奇的。下面,小编跟大家讲一讲重写和重载的不同之处吧。
重写的定义
是父类与子类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,且方法的返回值类型与抛出异常的类型各自与父类的一致,我们说该方法被重写 。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
重载的定义
是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
重写与重载的区别
重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般。‘ 下面小编举个例子说明一下。
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类不能重写 Father类 speak()方法,此时Son类 speak()方法相当与在Son类中定义的一个speak()方法.
Father类 speak()方法一但被final时,无论该方法被public,protected及默认所修饰时,Son类根本不能重写 Father类 speak()方法,试图编译代码时,编译器会报错.例:
public class Father
{
fianl public void speak()
{
System.out.println("Father");
}
}
public class Son extends Father
{
public void speak()
{
System.out.println("son");
} 写
}//编译器会报错.
Father类 speak()方法被时默认修饰时,只能在同一包中,被其子类被重些,如果不在同一包则不能重写。
Father类 speak()方法被时protoeted时,不仅在同一包中,被其子类被重些,还可以不同包的子类重写。
>>>下一页更多精彩“重写和重载在规则上的区别”