2012-07-19 35 views
0
abstract class Cell<Q> { 
      public abstract Q getValue(); // abstract method 
     } 
     class Cell1 extends Cell<Integer> { 
      public Integer getValue() {// abstract method implementation 
       return 0; 
      } 
     } 
     class Cell2 extends Cell<String> { 
      public String getValue() { // abstract method implementation 
       return "razeel"; 
      } 
     } 
     class test 
     { 
     public static void main(String[] a) 
      { 
       Cell obj=new Cell1(); 
      int ab=(Integer) obj.getValue(); 
      Cell objs=new Cell2(); 
      String str=objs.getValue().toString(); 
      System.out.println("ab=================== "+ab); 
      System.out.println("String=================== "+str); 
      } 
     } 
  • 使用抽象类,我们可以调用方法在Java中重载这样的一个例子。如果不是为什么?
  • 是否有可能在java中拥有相同签名但返回类型不同的方法?
+3

这不是重载,看起来更像是重写。重载意味着你的方法在同一个类(或者子类)中有不同的签名,就像不同的参数和不同的返回类型。 – 2012-07-19 05:13:21

+1

在我看来,对于像这样的问题,最好让你发布你的最佳答案和他们的辩护,然后再请他人发表他们的答案。 – 2012-07-19 05:18:59

+0

相关:http://stackoverflow.com/questions/1596628/why-dont-languages-allow-overloading-of-methods-by-return-value/1596661 – 2012-07-19 06:27:21

回答

2

这显然不是方法重载。重载意味着你的方法有不同的参数返回类型与重载无关。

public void method(int a,int b); 
public void method(String s,int b); 

或者你可以说不同数量的参数。

public void method(int a,int b,int c); 
public void method(int a,int b); 

你正在做的是重写。

+0

即使'公共布尔方法(int a)'是一个重载'方法'。 – 2012-07-19 05:41:25

0

我们可以称之为java中方法重载的一个例子。

如果没有,为什么?

重载意味着“同名,不同的参数”,但是你已经有了实现方法的子类,仅此而已。

是否有可能具有相同的签名但在java中返回类型不同的方法?

1

如上所示代码示例是方法覆盖的例子。 这是java实现运行时多态性的方式。 在java中,如果使用超类refernce调用overriden方法,java将根据调用时引用的对象的类型(而不取决于变量的类型)确定执行该方法的哪个版本。 考虑

class Figure{ 

     double dim1; 
     double dim2; 

     Figure(double dim1,double dim2){ 
      this.dim1=dim1; 
      this.dim2=dim2; 
     } 
     double area(){ 
      return 0; 
     } 

    } 
    class Rectangle extends Figure{ 

     Rectangle(double dim1,double dim2){ 
      super(dim1,dim2); 
     } 
     double area(){ 
      double a; 
      a=dim1*dim2; 
      System.out.println("dimensions of rectangle are "+dim1+" "+dim2); 
      return a; 
     } 

    } 
class Triangle extends Figure{ 


    Triangle(double dim1,double dim2){ 
     super(dim1,dim2); 
    } 
    double area(){ 
     double a=(dim1*dim2)/2; 
     System.out.println("base & altitude of triangle are "+dim1+" "+dim2); 
     return a; 
    } 

} 
class test{ 

public static void main(String[] args){ 
    Figure r; 
    Rectangle b=new Rectangle(10,10); 
    Triangle c=new Triangle(10,10); 
    r=b; 
    System.out.println("area of rectangle fig "+r.area()); 
    r=c; 
    System.out.println("area of triangle fig "+r.area()); 
    } 

}

输出:矩形的 尺寸10.0 10.0 区域矩形图100.0 基&高度三角都是10.0三角形的10.0 面积无花果50.0

为第二qstn:不。签名意味着独特。返回类型不是签名的一部分