java多态为什么

opmic 2012-06-22 10:43:07
public class Test {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.doit(1,2));
}

public String doit(int a,int b){
return "a";
}

public String doit(int ...is ){
return "b";
}
}
...全文
586 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
tinym87 2012-06-30
  • 打赏
  • 举报
回复
这不是多态,这是变态
虽说能编译运行,但这样看上去是有歧义的,完全没必要这么写。
skyWalker_ONLY 2012-06-30
  • 打赏
  • 举报
回复
这不是多态,这是方法重载。多态指的是方法的参数为父类或者接口,当方法调用时可以传入子类或者实现接口的类,程序运行时动态决定实际的参数
rorom 2012-06-29
  • 打赏
  • 举报
回复
运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中Java多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 (但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。)

醉剑 2012-06-29
  • 打赏
  • 举报
回复
对,这是方法的重载。
farmer-it 2012-06-29
  • 打赏
  • 举报
回复
晕了,方法重载,构造方法,楼主你搞懂了么?
simon_pang 2012-06-29
  • 打赏
  • 举报
回复
在面向对象语言中,接口的多种不同的实现方式即为多态。
朗晴 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 的回复:]
运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态……
[/Quote]



+1
朗晴 2012-06-29
  • 打赏
  • 举报
回复
多态:

当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 (但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。)
zhiwensun 2012-06-28
  • 打赏
  • 举报
回复
这仅仅是方法重载,算不上多态,当编译的时候,编译器会准确查找到该函数,确定他们,如果要重载的话必须满足两个条件之一:1,子类实例指向父类引用 2,一个接口多个实现。
chuanbing 2012-06-28
  • 打赏
  • 举报
回复
亲,貌似地球人都知道这是重载,不是多态哦。。。加油学吧
朗晴 2012-06-26
  • 打赏
  • 举报
回复
楼主找个基础视频看看.
WxmJun 2012-06-26
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]

亲,还是多看一些java关于多态与重写的知识吧
[/Quote]
亲,麻烦你解析下什么叫多态、重载、覆盖吧。现在这些名词都是一坨屎,乱得很,我完全搞不清它们的区别了。
Ada168855 2012-06-25
  • 打赏
  • 举报
回复
亲,还是多看一些java关于多态与重写的知识吧
朗晴 2012-06-25
  • 打赏
  • 举报
回复
这个是重载,不是多态,
多态是子类重写父类方法.
fengshuo850420 2012-06-25
  • 打赏
  • 举报
回复
看样子楼主是初学,不要纠结,继续往后学习,自然你就懂了!
wendellup 2012-06-25
  • 打赏
  • 举报
回复
重载

a
yousun4688 2012-06-25
  • 打赏
  • 举报
回复
方便对方法的使用
yangmingtang 2012-06-25
  • 打赏
  • 举报
回复
参数不一样,属于方法重载
方法重载,算不上多态,多态是子类重写父类方法
第一个是两个int参数,第二个相当于int[]数组参数,方法调用的时候会精确查找参数匹配的方法而调用
wangyilinoo 2012-06-25
  • 打赏
  • 举报
回复
这个是 重载吧 多态是一个对象在运行过程中有多种体现形式 而且多态是有前提的:1.有继承或者实现 2.要有方法的重写 3.要有父类引用指向子类对象
Lang_JK 2012-06-25
  • 打赏
  • 举报
回复
那是方法的重载,当你调用哪个哪个就被执行!
加载更多回复(21)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧