方法重载与覆盖的区别方法重载与覆盖的区别
方法重载与覆盖的区别【一】
方法覆盖(重写)和方法重载具有以下相同点:
·都要求方法同名。
·都可以用于抽象方法和非抽象方法之间。
方法覆盖和方法重载具有以下不同点:
·方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。
· 方法覆盖要求返回类型必须一致,而方法重载对此不做限制。
·方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。
·方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。
·父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次
方法重载与覆盖的区别【二】
一、重载和覆盖
多态性也是面向对象方法的一个重要特性.多态性是指在在程序中出现的"重名"现象,即在一个程序中相同的名字可以表示不同的实现.
在JAVA中,多态性主要表现在如下两个方面:
(1)方法重载.通常指在同一个类中,相同的方法名对应着不同的方法实现,但是方法的参数不同.
(2)成员覆盖.通常指在不同类(父类和子类)中,允许有相同的变量名,但是数据类型不同;也允许有相同的方法名,但是对应的方法实现不同.
在重载的情况下,同一类中具有相同的名字的方法.如何选择它的方法体呢?不能使用类名来区分,通常采用不同的方法形参表,区分重载要求形参在类型,个数和顺序的不同,在定义重载方法时,应在方法的形参的类型,个数和顺序有所不同,以便在选择时能够区别开来.
在覆盖的情况下,同名的方法存在于不同的类中,在调用方法只要指明其方法所归属的类名就可以了.
二、重载和覆盖的区别
在同一个类中方法成员的名称相同,但参数的类型和个数不同,这称为重载。
在存在继承关系的两个话,子类与父类的方法成员名称相同、参数的类型和个数相同的话,子类的方法覆盖父类的方法,这称为覆盖。
下面举个例子说明一下。例如:
class Shape {
void draw() {}
void erase() {}
}
class Circle extends Shape {
void draw() {
System.out.println("Circle.draw()");
}
void erase() {
System.out.println("ase()"); }
}
class Square extends Shape {
void draw() {
System.out.println("Square.draw()");
}
void erase() {
System.out.println("ase()");
}
}
class Triangle extends Shape {
void draw() {
System.out.println("Triangle.draw()"); }
void erase() {
System.out.println("ase()"); }
}
public class Test {
public static Shape randShape() {
switch((int)(Math.random() * 3)) { default:
case 0: return new Circle();
case 1: return new Square();
java重写和重载的区别
case 2: return new Triangle();
} }
public static void main(String[] args) { Shape[] s = new Shape[9];
for(int i = 0; i < s.length; i++) s[i] = randShape();
for(int i = 0; i < s.length; i++) s[i].draw();
}
}
输出结果
Triangle.draw()
Circle.draw()
Triangle.draw()
Triangle.draw()
Triangle.draw()
Square.draw()
Square.draw()
Triangle.draw()
Circle.draw()
Press any key 又一次执行
Triangle.draw()
Triangle.draw()
Circle.draw()
Circle.draw()
Circle.draw()
Triangle.draw()
Triangle.draw()
Square.draw()
Circle.draw()
Press any key
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论