黑马程序员技术交流社区

标题: 两个函数名一样。。。。参数列表列表一样。。可是都是..... [打印本页]

作者: 郑苑东    时间: 2012-4-12 07:49
标题: 两个函数名一样。。。。参数列表列表一样。。可是都是.....
如果是这种情况下。。AextendsB时会算重写吗?还是/
作者: 未长法    时间: 2012-4-12 08:16
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。
重写(Overriding)

  a、父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

  b、若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

  c、子类函数的访问修饰权限不能少于父类的;
因此当A 和B 的返回值类型也一样,并且B的访问权限不小于A 的访问权限时 就是重写。
作者: 郑苑东    时间: 2012-4-12 08:43
未长法 发表于 2012-4-12 08:16
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的 ...

如果你真想就告诉我答案,跟为什么。不要无聊。
作者: wang耀雨    时间: 2012-4-12 09:29
我想说的是楼主的问题问的有点不太清楚,但是看你提到了函数名一样参数列表也一样,又提到了extends,我觉得你是想说重载和覆盖吧,
如果AextendsB,只要子类中的函数大于等于父类中 的同名函数,就会重写,比如父类中的该函数被私有化private,那么子类是不能重写的。
作者: 马强    时间: 2012-4-12 10:22
按照你的条件 。如果方法一样参数一样,父类引用或者子类引用,传的都是子类对象,都会重写B方法。
如果是new的b对象就显而易见了。
作者: 孙天    时间: 2012-4-12 13:02
我好像明白lz的意思了,就是函数一样但返回值不一样的情况,这时会报错的。
当子父类出现一模一样的函数时就会出现覆盖,注意是一模一样的函数,也就是返回值类型必须相同,否则会报错,无法覆盖,说明正在尝试使用不兼容的返回类型
class aa{
public static void main(String[] args)
{
b p=new b();
int c=p.solo("A");
System.out.println(c);
}
}

class a{
public int solo(String A){
return 3;
}
}

class b extends a{
public int solo(String A){//如果改成String solo(String A)就会报错
return 4;
}
}

lz明白了吗
作者: 欧阳才志    时间: 2012-4-12 13:16
兄弟,没有怎么看懂你问题。
但是如果在同一个类中,是不可以同时定义两个函数名 参数列表都一样的函数的。
你说的情况除非是子父类继承重载的情况下。
如果父类有一个函数和子类的函数  函数名和参数列表都相同的话,子类继承的时候是会将父类的这个函数重写的,默认还是子类的这个函数。但是如果你强烈用SUPER引用父类,那么肯定就是调用父类的该函数了。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2