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で同じ署名で異なる戻り値の型を持つメソッドを持つことは可能ですか?
4

3 に答える 3

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);

あなたがしていることはオーバーライドです。

于 2012-07-19T05:21:50.010 に答える
1

上記のコード サンプルは、メソッドのオーバーライドの例です。これは、Java がランタイム ポリモーフィズムを実装する方法です。Java では、オーバーライドされたメソッドがスーパークラス参照を使用して呼び出された場合、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 長方形の面積 fig 100.0 三角形の底辺と高さは 10.0 10.0 三角形の面積 fig 50.0

第 2 四半期: いいえ。署名は唯一無二の意味。戻り型は署名の一部ではありません

于 2012-07-24T08:01:26.593 に答える
0

これは、Java におけるメソッドのオーバーロードの例と言えますか。

いいえ。

そうでない場合、なぜですか?

オーバーロードは「同じ名前、異なるパラメーター」を意味しますが、メソッドを実装するサブクラスを持っているだけです。

javaで同じ署名で異なる戻り値の型を持つメソッドを持つことは可能ですか?

いいえ。

于 2012-07-19T05:27:07.333 に答える