2012-03-08 11 views
-2

私はこれが私がばかげているかもしれないとはかなり確信していますが、私は高くて低く見えて、経験豊富な友人に助けを求めました。しかし、私は抽象シェイプクラスからxとyにアクセスして、それらを私のインターフェースで使用しようとしています。しかし、私は現在、レンガの壁に当たっています。私は最良の選択肢は、それらを保護し、そのように回避することだと思います。とにかく、私の質問は、クラス移動のMoveableの下で、どのようにxとyを操作するのですか?抽象クラスとJavaでのインタフェースの問題

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package C_I; 

import java.awt.*; 

/** 
* 
* @author Mouse 
*/ 
public abstract class Shape implements Moveable { 
    private int x; 
    private int y; 
    private Color myColor; 
    private Color background; 

    public Shape(int tX, int tY, Color tmpColor, Color tmpBackground) 
    { 
     x = tX; 
     y = tY; 
     myColor = tmpColor; 
     background = tmpBackground; 
    } 

    public abstract void draw(); 

    public abstract void clear(); 

    public abstract void resize(double s); 

    public int getX() 
    { 
     return x; 
    } 

    public int getY() 
    { 
     return y; 
    } 

    public Color getmyColor() 
    { 
     return myColor; 
    } 

    public Color getBackground() 
    { 
     return background; 
    } 

    public void setX(int tmpX) 
    { 
     x = tmpX; 
    } 

    public void setY(int tmpY) 
    { 
     y = tmpY; 
    } 

} 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package C_I; 

/** 
* 
* @author Mouse 
*/ 
public interface Moveable{ 
    void clear(); 

    public void move(int alphaX, int alphaY) 
    { 
     setX(getX() + alphaX); 
    } 

    void draw(); 

} 
+2

を拡張Shape持ってどこかに質問はありますか? – Bohemian

答えて

3

あなたのコードでは非常に基本的な間違いがあります:

あなたinterfaceは、メソッドの定義を持っています。一方、"最も一般的な形式では、interfaceは空のボディを持つ関連する方法のグループです。"。したがって、インタフェースのメソッドに実装を提供することはできません。 move()メソッドの定義をMoveableインターフェイスから抽象クラスShapeに移動することができます。

EDIT:ここは、あなたがそれを行うことができる方法である:http://docs.oracle.com/javase/tutorial/java/concepts/interface.html

+0

恐れ入りますが、私はそれを行うことができません。基準にはMoveableのMoveメソッドが必要です。 – user1256211

+0

@ user1256211インタフェース自体が 'move'メソッドを実装しているか、具体的なクラスの実装に' move'メソッドが含まれていることをインターフェイスが指定しているという基準ですか?後者は理にかなっています。前者は非常に奇妙です。 – dlev

+0

彼のUML図と非常に悪い方向によると、彼は前者を望んでいるように見える。 – user1256211

0

@インターフェイスに関する

public abstract class Shape implements Moveable { 
    ..... 
    public void move(int alphaX, int alphaY) 
    { 
     setX(getX() + alphaX); 
    } 
} 
public interface Moveable{ 
    void clear(); 
    public void move(int alphaX, int alphaY); 
    void draw(); 
} 

読む前に述べたように、あなたがインターフェイスにメソッド本体を持つことはできません。

あなたは複数のクラスがmoveメソッドの実装を共有したい場合は、いくつかの基本的なオプションは次のとおりです。

  1. Moveable代わりインターフェース
  2. の抽象クラスはMoveableBase implements Moveableと呼ばれるMoveableの基本実装を提供してください、そしてMoveableBase
関連する問題