2013-03-01 7 views
5

私はばかばかしいコードベースを使っているので、あるパッケージから別のパッケージにファイルを移動する必要があります。しかし、私はコードベース全体をローカルに持っていないので、元のファイルへのすべての参照を見つけて更新したかどうかはわかりません。私が何かを壊さないようにするために、元のファイルを残して、私が作成した新しいファイルを拡張するだけです。理想的には、彼らはどちらもまったく同じ名前を持っていました。残念ながら、古いファイルを非難して削除する予定ですが、今のところこれは最も堅牢な解決策のようです。しかし、私はそれをJavaで動作させる方法を理解できません。ここで同じ名前のJavaクラスを拡張することは可能ですか

は新しいクラスである:ここでは

package myproject.util.http; 

import javax.servlet.http.HttpServlet; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public abstract class MyServlet extends HttpServlet 
{ 

    public void service (HttpServletRequest request, 
         HttpServletResponse response) 
      throws ServletException, IOException 
    { 
     // implementation of service 
    } 

} 

は、新たに拡張し、古いクラスです:

package myproject.util.net; 

import myproject.util.http.MyServlet; 

public abstract class MyServlet extends myproject.util.http.MyServlet 
{ 
// this class was deprecated, use myproject.util.http.MyServlet instead 
} 

は残念ながら、私はエラーを取得する:

MyServlet is already defined in this compilation unit 

はこれです可能な場合、または親クラスの新しい名前が必要です。

答えて

5

完全修飾名を持っていますが、importステートメントを削除する必要があります。

そうでなければ、コンパイルユニットは、あなたのパッケージに宣言されているすべてのクラスを完全修飾名なしでインポートします。つまり、2つのMyServletを区別することができません。これは違法です。

0

あなたがする必要があるのは、インポートステートメントを削除することだけです。すべてがうまくいくでしょう。

0

だけでインポートを削除し、あなたがそれを行うことができますmyproject.util.http.MyServlet

関連する問題