2012-07-19 30 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:不。簽名意味着獨特。返回類型不是簽名的一部分