abstractとインタフェースの比較について
2613 ワード
私は最近javaを勉強したばかりで、フォーラムで面白い問題を見つけました.http://bbs.csdn.net/topics/391830364#new_post抽象クラスとインタフェースには同じ抽象メソッドがあり、1つのクラスがその抽象クラスを継承し、そのインタフェースを実現しています.では、このサブクラスの書き換え方法はインタフェースを呼び出すのですか、それとも抽象クラスを呼び出すのですか.
例:public abstract class abstractClass{public abstract void test();}
public interface interfaceClass{ public abstract void test(); }
public class E extends abstractClass implements interfaceClass{ @Override public void test(){ //TODO Auto-generated method stub } }
では、サブクラスは抽象クラスのtest()を呼び出すのか、それともインタフェースのtest()を呼び出すのか.eclipesでは上記の実装が行われる:コードは以下の通りである:package day 1002;
abstract class dada 1{public abstract void test(int a,int b);//抽象クラスでのメソッド}
interface interfaceclass{public abstract void test(int x,int y);//インタフェースのメソッド}class E extends dadada 1 implements interfaceclass{public void test(int a,int b){System.out.println(a+b);}public class dada {
}抽象クラスまたはインタフェースにカーソルを置くメソッド名:ctrl+shift+gこのメソッドの参照を表示できます.図: Searchウィンドウでは、**が①だけ書けば、両方のメソッドがmainメソッドにフォーカスできることに気づきました**を貼らずに②だけ書けば、インタフェースでのメソッドは参照が見つからない**翻訳するとworkspaceでは参照がなく、0マッチングは③だけ書くと抽象クラスでのメソッドは参照が見つからない**
やはりmainでどのように引用されているかを見て、次の英語のウェブサイトを抜粋します.http://lvvbbe.com/questions/8147988/what-is-the-difference-between-an-interface-and-abstract-class興味があれば見てもいいです.
abstractとインタフェースの比較について:1.abstractクラスとインタフェースはabstractメソッド2を使用することができる.インタフェースには定数のみがあり、変数はありませんが、abstract変数には定数も変数もあります.3.abstractクラスではabstractメソッドでなくてもよく、インタフェースではできません
では、プログラムを設計するときにインタフェースを使用するか抽象クラスを使用するかをどのように確定すればいいのでしょうか.abstractクラスは、サブクラスの書き換えを必要とする重要なabstractメソッドのほか、サブクラスが継承できる変数と非abstractメソッドも提供されています.ある問題が継承を使用する必要がある場合、より良い解決が必要です.例えば、自楽は親クラスのabstractメソッドを書き換える必要があるだけでなく、親クラスから変数を継承するか、重要な非abstractメソッドを継承する必要があります.abstractクラスの使用を考慮することができ、ある問題が継承する必要がなく、いくつかの重要なabstractメソッドを与える実装がいくつか必要である場合、インタフェースの使用を考慮することができる.
例:public abstract class abstractClass{public abstract void test();}
public interface interfaceClass{ public abstract void test(); }
public class E extends abstractClass implements interfaceClass{ @Override public void test(){ //TODO Auto-generated method stub } }
では、サブクラスは抽象クラスのtest()を呼び出すのか、それともインタフェースのtest()を呼び出すのか.eclipesでは上記の実装が行われる:コードは以下の通りである:package day 1002;
abstract class dada 1{public abstract void test(int a,int b);//抽象クラスでのメソッド}
interface interfaceclass{public abstract void test(int x,int y);//インタフェースのメソッド}class E extends dadada 1 implements interfaceclass{public void test(int a,int b){System.out.println(a+b);}public class dada {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ①
/*
E e = new E();
dada1 abs=new E();
*/
// ②
/*
dada1 abs=new E();
abs.test(1,3);
*/
// ③
/*
InterfaceClass inter=new E();
inter.test();
*/
}
}抽象クラスまたはインタフェースにカーソルを置くメソッド名:ctrl+shift+gこのメソッドの参照を表示できます.図: Searchウィンドウでは、**が①だけ書けば、両方のメソッドがmainメソッドにフォーカスできることに気づきました**を貼らずに②だけ書けば、インタフェースでのメソッドは参照が見つからない**翻訳するとworkspaceでは参照がなく、0マッチングは③だけ書くと抽象クラスでのメソッドは参照が見つからない**
やはりmainでどのように引用されているかを見て、次の英語のウェブサイトを抜粋します.http://lvvbbe.com/questions/8147988/what-is-the-difference-between-an-interface-and-abstract-class興味があれば見てもいいです.
abstractとインタフェースの比較について:1.abstractクラスとインタフェースはabstractメソッド2を使用することができる.インタフェースには定数のみがあり、変数はありませんが、abstract変数には定数も変数もあります.3.abstractクラスではabstractメソッドでなくてもよく、インタフェースではできません
では、プログラムを設計するときにインタフェースを使用するか抽象クラスを使用するかをどのように確定すればいいのでしょうか.abstractクラスは、サブクラスの書き換えを必要とする重要なabstractメソッドのほか、サブクラスが継承できる変数と非abstractメソッドも提供されています.ある問題が継承を使用する必要がある場合、より良い解決が必要です.例えば、自楽は親クラスのabstractメソッドを書き換える必要があるだけでなく、親クラスから変数を継承するか、重要な非abstractメソッドを継承する必要があります.abstractクラスの使用を考慮することができ、ある問題が継承する必要がなく、いくつかの重要なabstractメソッドを与える実装がいくつか必要である場合、インタフェースの使用を考慮することができる.
, 。 。