日期:2014-05-20  浏览次数:20756 次

Java中多态定义是什么?特点是什么?为什么要用多态?
Java中多态定义是什么?特点是什么?为什么要用多态?

------解决方案--------------------
给你个最简单的解释吧
多态就是同一个方法名的多种不同实现

所谓的不同实现,是指参数的个数或类型的不同,返回类型可同也可不同

为什么要用多态呢??这么给你举个例子,eat,通用是吃
你eat(苹果),甜吧?? 但是要是让你eat(黄连),那就是苦的咯
也就是同一种方名,但是不同的时候(参数)做不同的事
------解决方案--------------------
放屁...
你这说的是重载吧..
多态有3个条件
1:继承
2:重写(重写父类继承的方法)
3:父类引用指向字类对象

多态的话还涉及到有个转型的问题
多态还算蛮复杂的
把一些基础的东西先学好..
慢慢就懂了
------解决方案--------------------
又放屁.


class A{
public method(){
......
}
}
class A1 extends A {
public method(){
......
}
}
class A2 extends A{
public method(){
......
}
}
main 方法

A a=new A1(); 出现多态了,对象的引用指向了他子类A1的new出来的对象 ,method方法的指针已经指向A1的method,当他调用method方法时候,调的就是A1的方法
a.method(); 调用A1的method方法,跟重载没关系.只有重写

A a=new A2(); 出现多态了,对象的引用指向了他子类A2的new出来的对象 ,method方法的指针已经指向A2的method,当他调用method方法时候,调的就是A2的方法
a.method(); 调用A2的method方法,跟重载没关系.只有重写





------解决方案--------------------
interface Parent 

String method(); 


class Child1 implements Parent 

public String method() 

return "Child1 "; 



class Child2 implements Parent 

public String method() 

return "Child2 "; 



public class Test 

public static void main(String[] args) 

Parent parent = new Child1(); 
System.out.println(parent.method()); 
parent = new Child2();
System.out.println(parent.method()); 



输出结果: 
Child1 
Child2 



只有多个子类从一个父类继承或实现一个接口。 在建立这些子类实例时,都用父类或接口做为变量类型,如上例中的parent。也就是说,用户对应的接口都是一个Parent。而由于new后面的子类不同,而产生调用同一个方法method返回不同结果的显现叫多态。就是同一个方法在使用不同子类时有不同的表现(在这里是不同的返回值)。 

方法重载不叫多态。 (转)
------解决方案--------------------
在下刚学Java不久,也来说说对Java中多态的认识,请大家指正!
 Manager extends Employee之后:

-------------------------------------------------
(一)
Employee e = new Manager();
此为多态:父类引用指向子类对象。

-------------------------------------------------
(二)
void methodA(Employee e){

}
main方法中,可以使用 “对象.methodA(new Manager());”来调用这个方法
参数多态!

-------------------------------------------------
(三)
Employee[] e = new Employee[10];
e[0] = new Manager();
这是多态特性!

-------------------------------------------------
(四)jdk1.5中
Employee doSomething(){
return new Manager();
}
返回值多态!

-------------------------------------------------
(五)
如果Employee和Manager中有如下代码:
class Employee {
public String name="张三";
public void m1(){
System.out.println("Employee::m1()");
}
}
class Manager extends Employee {
public String name="李四";
public void m1(){
System.out.println("Manager::m1()");
}
}
再使用如下代码时:
Employee e = new Manager();
System.out.println(e.name);
e.m1();
//结果会打印出“张三”和“Manager::m1()”。
这是多态中的动态绑定:JVM会自动找到对象e是由Manager类实例化而来的,所以有‘覆盖’时调用Manager中的方法;而属性则不会被动态绑定,所以一定是Employee 中的(e的数据类型被声明为Employee了)。