关于重写和覆盖的区别??

重写与覆盖的区别,以代码为例!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

方法覆盖(重写)和方法重载具有以下相同点:

·都要求方法同名。

·都可以用于抽象方法和非抽象方法之间。

方法覆盖和方法重载具有以下不同点:

·方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致。

· 方法覆盖要求返回类型必须一致,而方法重载对此不做限制。

·方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。

·方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。

·父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

重写和覆盖是对同一个事物的两种说法。
在派生类重写函数,对基类来说,派生类的函数覆盖了基类的函数实现。

 代码举例
class A
{
public void foo() { System.out.println("A.foo"); }
}
class B extends A
{
@override
public void foo() { System.out.println("B.foo"); }
}
调用
A a = new A();
a.foo(); // A.foo
a = new B();
a.foo(); // B.foo

重写也叫覆盖,比如子类总是以父类为基础,额外增加新的成员变量和方法,比如鸟多包含飞翔的方法,但鸵鸟是一种特殊的鸟,鸵鸟是鸟的子类,因此它应该从鸟类获得飞翔的方法,但这个飞翔的方法不适合鸵鸟,所以鸵鸟要重写鸟类
pubilc class bird{
public void fly()
{system.out.println("我会飞");}}

public class ostrich extends bird{public void fly()
{system.out.println("我会走");}
public static void main(String[] args){
ostrich os=new ostrich();
os.fly();}}

其实很好理解只需要记住如下两点:
1.重写发生在继承或者实现接口,这种情况下一般至少会涉及两个类
2.重载主要发生在类中,一般只涉及一个类
重写:因为存在继承或者实现的关系,所以方法签名必须一致,否则视为新增方法.重写相对而言比较简单.
重载:涉及在类的内部,需要严格区分方法签名,否则无法识别.
重载需要注意一下几点:
1.方法名称必须一致.返回值不做要求.因为在某些情况下我们只需要调用该方法实现相关功能.不会关注返回值.
2.参数个数可以一样,但是类型不能一致
3.参数类型可以一样,但是参数个数不能一样

三个容易混淆的概念:重写,重载,覆盖
重写和覆盖是一个东西,只是不同说法,对父类的重写或者覆盖overriding
重载是针对方法名相同,参数不同(类型或者个数)overloading

1.重写发生在继承或者实现接口,这种情况下一般至少会涉及两个类
2.重载主要发生在类中,一般只涉及一个类
重写:因为存在继承或者实现的关系,所以方法签名必须一致,否则视为新增方法.重写相对而言比较简单.
重载:涉及在类的内部,需要严格区分方法签名,否则无法识别.
重载需要注意一下几点:
1.方法名称必须一致.返回值不做要求.因为在某些情况下我们只需要调用该方法实现相关功能.不会关注返回值.
2.参数个数可以一样,但是类型不能一致
3.参数类型可以一样,但是参数个数不能一样

简单的说来:
public class A{
//...
public void test(int a){
system.out.println(a);
}
}
public class a extends A{
//...
public void test(int a){//与父类方法完全一样的方法名与参数类型
//...
int a=a+1;
system.out.println(a);
}
}
这个情况就可以说是a重写了A的test()方法