我正在学习SCJP测试的java语言。
理解“多态方法”有点难。
你能为我解释一下吗? 或者给我一些链接?
答案 0 :(得分:19)
“多态”意味着“许多形状”。在Java中,您可以使用具有相同名称的具有不同内容的子类的超类。传统示例是超类Shape
,包含子类Circle
,Square
和Rectangle
以及方法area()
。
所以,例如
// note code is abbreviated, this is just for explanation
class Shape {
public int area(); // no implementation, this is abstract
}
class Circle {
private int radius;
public Circle(int r){ radius = r ; }
public int area(){ return Math.PI*radius*radius ; }
}
class Square {
private int wid;
Public Square(int w){ wid=w; }
public int area() { return wid*wid; }
}
现在考虑一个例子
Shape s[] = new Shape[2];
s[0] = new Circle(10);
s[1] = new Square(10);
System.out.println("Area of s[0] "+s[0].area());
System.out.println("Area of s[1] "+s[1].area());
s[0].area()
调用Circle.area()
,s[1].area()
调用Square.area()
- 因此我们说Shape
及其子类利用对方法区域的多态调用。< / p>
答案 1 :(得分:6)
查理的回答用简单的术语解释了多态性是什么。
从那里继续,这将是一个“多态方法”:
public void Shape CreateShape() {
return new Circle(10);
}
它的“多态”意味着它的签名表示你得到的是Shape
,但你真正获得的是Shape
的子类。既然你不确切知道你得到了什么(可能是Circle
,Square
等等,你必须使用超类的接口(即多态)来处理它。 / p>
我应该提一下(可能是因为我对Java只有轻微的经验)“多态方法”是一个不熟悉的术语,所以它可能被用来表示其他东西。这只是我的解释。
答案 2 :(得分:0)
多态性是一种表示“多种形式的一种形式”的过程。
这不是编程概念,但它是原则之一。
Example 1 :
class A
{
void print(double d)
{
System.out.println("Inside Double");
}
void print(float f)
{
System.out.println("Inside Float");
}
}
class B
{
public static void main(String [ ] args)
{
A obj1 = new A();
obj1.print(10.0);
}
}
Output :
//save as : B.java
//compile as :javac B.java
//run as : java B
Inside Double
______________________
Example 2 :
class A
{
void print(double d)
{
System.out.println("Inside Double");
}
void print(float f)
{
System.out.println("Inside Float");
}
}
class B
{
public static void main(String [ ] args)
{
A obj1 = new A();
obj1.print(10.0f);
}
}
Output :
//save as : B.java
//compile as :javac B.java
//run as : java B
Inside Float
_______________________
Example 3 :
class A
{
void print(double d)
{
System.out.println("Inside Double");
}
void print(float f)
{
System.out.println("Inside Float");
}
}
class B
{
public static void main(String [ ] args)
{
A obj1 = new A();
obj1.print(10);
}
}
Output :
//save as : B.java
//compile as :javac B.java
//run as : java B
Inside Float
答案 3 :(得分:0)
如果满足以下所有条件,则方法是签名多态的:
它在java.lang.invoke.MethodHandle类中声明。
它有一个Object []类型的形式参数。
它的返回类型为Object。
设置了ACC_VARARGS和ACC_NATIVE标志。
在Java SE 8中,唯一的签名多态方法是类java.lang.invoke.MethodHandle的invoke和invokeExact方法。
答案 4 :(得分:0)
多态方法是一种可以采用多种形式的方法。通过我的意思,该方法可能在不同的时间调用不同的方法。
假设您有一个class Animal
,一个class Dog extends Animal
和一个class Cat extends Animal
,他们都覆盖方法sleep()
然后..
animal.sleep();
..可以根据变量animal