java中,子类是否允许有一个方法和父类方法名字相同,而参数类型不同 为什么

如题所述

Java的重写和重载是两种在Java中经常提到的两组概念,它们在各个方面都有着很大的不同,下面详细介绍你要了解的区别。

Java的多态机制

即重写,重写主要用于子类和父类之间,在父类中定义了一个方法,同时在子类中对这个方法进行重写,实现子类行为的特殊化,例如:
class Animal{

void eat(){ System.out.print("animal eat");}

}

class Tiger extends Animal{

void eat(){System.out.print("Tiget eat");}

}

子类中的eat方法即对父类的eat方法实现了重写,重写最常见的例子就是下面的声明:

Animal some=new Tiger();

关于重写,遵循以下的规则:

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

(3)只有实例方法才能被重写,超类中的final方法不能被重写。

(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。

(5)注意一种特殊情况:如果超类的方法版本中声明了检查异常,但重写的子类方法中没有声明,这时如果使用多态的方式进行调用,那么编译器认为你调用的是声明了异常的方法。

(6)尽管多态是在编译时确定对象的类型,但在编译时,还是根据父类的方法声明进行程序检查。因此,如果子类中定义的方法,在父类中没有定义,则会出项编译错误。

Java的重载机制:
重载的实质:在一个类中使用签名相同的多个方法。

按照范围,可以将重载分为在一个类中重载,和在子类和父类中重载。现分别解释如下:

1.在一个类中定义多个具有相同签名的方法,这些方法必须具有不同的参数列表,比如一个类的构造函数

2.在父类和子类中,子类由于继承而拥有了父类的某些方法,此时在子类再定义具有相同签名的方法(必须具有不同的参数列表),这个地方很容易和重写相混淆,因此千万注意。

重载的规则主要记住亮点:
一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。

二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

注意下面的一种情况:(重写和重载的混合)

class UseAnimal{

void doStuff(Animal sa){}

void doStuff(Tiger sa){}

public static void main(String[] args){

UseAnimal ua=new UseAnimal();

Animal an=new Tiger();

ua.duStuff(an);

}

}

此时,调用的方法doStuff的Animal版本,因为调用重载方法是在编译时决定的,an的声明类型是Animal。所以调用Animal版本。

始终注意一点:重载的判断始终是在编译时决定
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-19
简单来说!是重载和重写!重载时方法名字一样但是参数的类型不一样!重写是方法名一样,参数也一样!只有这两种!你从父类继承或者实现接口都可能会用到重写这个概念!因为有时父类的方法不一定适合子类去用!这个时候就要用到重写方法!改变方法的内容一边更好的去使子类去运行!而重载则是当你想要调用一个方法时发现需要用到其他的变量但是这个方法却没有给你提供,这是你就要用到重载去增加你需要的变量!以便更方便的去调用这个方法!
第2个回答  2010-08-19
这个是重写,子类重写了父类的方法,,父类中的方法并不一是子类所需要的,,所以就重写了一下。。
第3个回答  2010-08-19
函数名字相同参数不同叫做函数重载。
子类继承了父类的某个方法,然后在子类里面实现该函数的一个重载函数,这个是完全没问题的,就算两个函数都在同一个类里面也没问题。
例如:
fun(int a)
fun(String a)
这两个函数名字相同,参数的类型不同,就叫做函数重载了.
就算其中某个函数是子类从父类继承过来的,也属于函数重载.
推荐你先看下函数重载的概念.

参考资料:http://baike.baidu.com/view/534068.htm?fr=ala0_1

第4个回答  2010-08-19
名字相同,而参数类型相同叫重写,也就是子类的对象在使用该方法的时候执行的就是子类中重写的这个方法
名字相同,而参数类型不同叫重载,它们是不同的方法