2012-02-10 23 views
0

私はAP CSに在籍しており、これが動作するかどうかを判断しようとしています。AP CS Practice - OOP

public interface Controller 
public class Widget implements Controller 
public class Thingy extends Widget 

Controller myControl = new Thingy(); 

上部のインタフェース/クラスが実際に定義されているものとします。 4行目(Controller myControl = new Thingy();)は動作しますか、それともそのようなインターフェイスからオブジェクトを作成できませんか?

+0

はい – Adrian

答えて

2

できます。

この場合、具体的なクラスであるThingyのインスタンスをインスタンス化しています。あなたはタイプControllerと宣言しました。つまり、それを使用しているものは、インターフェイスが利用可能なメソッドControllerにしかアクセスできないことを意味します(ダウンキャスト、リフレクションなどを使用しない限り)。これは、実際の実装をmyControlに置き換えることができ、オブジェクトのユーザーは気にしないため、良い方法です。

1

OOPを完全に理解するためには、あなたが生きて呼吸しなければならない2つの用語 - 多形性と遺伝の基礎です。

これを考えてみましょう:

あなたは車のインターフェース、車やスポーツカーを拡張ポルシェオブジェクトを実装スポーツカーオブジェクトを持っています。

スポーツカーは、IS-車はあなたが言うことができる:Car myCar = new SportsCar(); ポルシェは、IS-スポーツカーは、あなたが言うことができるように:同様にSportsCar myCar = new Porsche();

を、ポルシェは、あなたは間違いなく言うことができるので、車-IS:

Car myCar = new Porsche(); 

ボトムラインは、そのサブクラスへの参照を保持できるスーパークラス(インタフェース、抽象クラスなど)です。

0

Thingyのインスタンスが作成され、コントローラが実装されています。 コントローラインターフェイス自体はインスタンス化できません。