11497


独習でjavaを学習中なのですが、そこで  
”1つ目のmove()メソッドでは円をｘ軸上で移動します。２つ目のメソッドでは中心座標を両方とも更新します。  
double型の引数を１つだけ受け取って円をy軸上に移動するようなmove()メソッドは作成できません。そのようなメソッドは一つ目のメソッドとシグネチャが同じになりコンパイルエラーとなるためです"  
と書かれているのですが  
そこで自分なりにy軸上に移動するようなメソッドを作成してみたのですがエラーとなりません。

自分でやってみたコードは

[code]

    class Circle{
        double x;
        double y;
        double radius;
    
        Circle(double radius){
            this.radius = radius;
        }
        Circle(double x, double y, double radius){
            this.x      = x;
            this.y      = y;
            this.radius = radius;
        }
        void move_x(double x){
            this.x = x;
        }
        void move_x(double x , double y){
            this.x = x;
            this.y = y;
        }
        void move_y(double y){
            this.y = y;
        }
        void move_y(double x,double y){
            this.x = x;
            this.y = y;
        }
        void scale(double a){
            radius *= a;
        }}
    
    class CircleOverloadMethod{
    public static void main(String args[]){
        Circle c = new Circle(4);
        Circle d = new Circle(4);
        System.out.println("x軸上で移動");
        c.move_x(2);
        c.scale(0.5);
        System.out.println("c.x      = " + c.x);
        System.out.println("c.y      = " + c.y);
        System.out.println("c.radius = " + c.radius);
        c.move_x(-2,-2);
        c.scale(2);
        System.out.println("c.x      =" + c.x);
        System.out.println("c.y      =" + c.y);
        System.out.println("c.radius =" + c.radius);
        System.out.println("ｙ軸上で移動");
        d.move_y(2);
        d.scale(0.5);
        System.out.println("d.x      =" + d.x);
        System.out.println("d.y      =" + d.y);
        System.out.println("d.radius =" + d.radius);
        d.move_y(-4,-4);
        d.scale(4);
        System.out.println("d.x      =" + d.x);
        System.out.println("d.y      =" + d.y);
        System.out.println("d.radius =" + d.radius);
    
    }}
    
[/code]

です。このコードについても理解しきれていない部分やメソッドをオーバーロードするという意味やメソッドとシグネチャが同じになりという意味もよくわかっていません。  
記述通りエラーをだしたいのと、y軸上に移動するようなmove()メソッドの作成の仕方もあるのでしたら教えていただきたいです。よろしくお願いします。


CC BY-SA 3.0
2015-06-19T02:55:53.987
11494
2015-06-19T04:10:39.850
2015-06-19T03:14:01.070
5044
10197
question
java
プログラミングでCircleクラスのmove()メソッドをオーバーロードする方法について


エラーになる場合は、以下のような場合です。  
引数`x`を受けてそれで`x`を更新するメソッド`move`がある。

[code]

    void move(double x){
        this.x = x;
    }
    
[/code]

それで  
引数`y`を受けてそれで`y`を更新するメソッド`move`を次のように書こうとすると・

[code]

    void move(double y){
        this.y = y;
    }
    
[/code]

> エラー: メソッド move(double)はすでにクラス Circleで定義されています

というエラーになります。  
これは、シグネチャ（メソッドの型と名前）が同じだからです。  
メソッドを区別するのに、メソッドの「名前」、[引数の数と型そして並び」で区別しますので、  
これが全て同じメソッドは定義できません。  
逆に、同じメソッド名でも

[code]

    void move(double x , double y){
        this.x = x;
        this.y = y;
    }
    
[/code]

の場合は引数の型（double型は同じだが２つと１つで数が異なる）が異なるのでＯＫです。  
このように同じ名前のメソッドを定義できる仕組みをオーバーロードといいます。

質問のコード場合はメソッドの名前が異なるので、(期待するように)エラーにはなりません。


CC BY-SA 3.0
2015-06-19T03:27:16.303
11497
2015-06-19T04:10:39.850
2015-06-19T04:10:39.850
5044
5044
11494
answer


こういうこと↓はできないよ。ということだと思います。<http://goo.gl/RDiV1B>

[code]

    class Circle{
    
        double x;
        double y;
        double radius;
    
        Circle(double radius){
            this.radius = radius;
        }
    
        Circle(double x, double y, double radius){
            this.x      = x;
            this.y      = y;
            this.radius = radius;
        }
    
        void move(double x){
            this.x = x;
        }
    
        void move(double x , double y){
            this.x = x;
            this.y = y;
        }
    
        void move(double y){
            this.y = y;
        }
    
    }
    
[/code]

<http://goo.gl/RDiV1B>


CC BY-SA 3.0
2015-06-19T03:35:45.083
11498
2015-06-19T03:35:45.083
2432
11494
answer