Javaにおいて

interfaceとClassは何が違うのでしょうか?

またClassの中にinterfaceを書いても良いのでしょうか?

Classの中にinterfaceを実装する物なのでしょうか?

恥を承知で質問致します。答えて頂けると嬉しいです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

「Classの中にinterfaceを書く」とか「Classの中にinterfaceを実装する」とかがどのようなことを指すのかわからないので無視しますが (具体的なコードが出てくればそれで判断するかもしれん), 今日におけるもっとも直接的なインターフェースとクラスの違いは


インスタンスを生成できるかどうか
です.
    • good
    • 0

もちろん抽象クラスだとインスタンスを作ることはできないけど, よしんば全てのメソッドを実装してもインターフェイスではインスタンスを作れない.



あとは... 例えば
・インターフェイスに「static でも final でもないフィールド」は設定できない
・インターフェイスの全てのメンバーは自動的に public
・クラスはインターフェイスを実装できるがインターフェイスはクラスを継承できない
など微妙にしちめんどうな違いがある.

クラスファイル的には「特殊な抽象クラス」の扱いなんだけど.
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QJavaで「class、interfaceまたはenumがありません」というエラー発生しました

コンパイルしたのですが下記のエラーが発生したんですが何が原因ですか。

エラー内容
C:\java>javac Janken_06.java
Janken_06.java:219: エラー: class、interfaceまたはenumがありません
public static void main(String[] args) {
^
エラー1個
回答お願い致します。

Aベストアンサー

ソースコードが無いと何とも。。。
Janken_06.javaの219行目前後と、それに関わる定義部分をチェックしましょう。

Q(今日の夕方までに)class、interfaceまたはenumがありませんて言うエラーが出ました

C:\java>javac Janken_06.java
Janken_06.java:216: エラー: class、interfaceまたはenumがありません
public static void main(String[] args) {
^
Janken_06.java:218: エラー: class、interfaceまたはenumがありません
}
^
エラー2個
エラー発生いたしました。
原因はなんでしょうか。

ソースは
public static void main(String[] args) {
new Janken_06();
}
}
です。

大至急お願い致します。(今日までには完成させたいんで。)

Aベストアンサー

エラーの通りだと思いますが...

> ソースは
> public static void main(String[] args) {
> new Janken_06();
> }
> }
> です。

class定義がありませんが...

Qinterfaceを実装するとは?

interfaceを実装するとはどういうことですか?

abstractはクラスの継承で

学校 -abstract(拡張)― 教室 ―abstract(拡張)― 生徒

と機能を細分化するものとわかりました。

インターフェースってなんですか・・

Aベストアンサー

>AppletContextインターフェースにあるgetAudioClipメソッドを使うにはどうすればいいですか
例えば、AppletクラスのgetAppletContextメソッドで取得できます。
class myClass extends Applet {
  public void aaa() {
    AppletContext x = getAppletContext();
    URL u = new URL("~");
    AudioClip c = x.getAudioClip(u);

変数xにはあるクラスのインスタンスが代入されます。このクラスの
名前はAppletContextではありませんが、AppletContextを実装する
ので、getAudioClip()メソッドを持っています(いなければならない)。
インターフェース、抽象クラスなどの考え方は一度、分かっている
人に徹底的に教えてもらったほうが良いでしょう。文章だと、理解
するのが、結構大変です。(説明する方も難しい)

QJavaで実装されたJavaインタプリタ知りませんか?

Javaで書かれたプログラムの実行時にJavaのコードを文字列として取り込み実行できるAPIをどこかで見た気がしたのですが、紹介されていたサイトを忘れてしまい、発見できません。どなたかご存知でしたら教えてください。

サイトのニュアンスは、スタンドアロンのJavaアプリケーションまたはJavaAppletにテキストボックスがあり、そこにJava(Java scriptではない)コードを書いて、そのコードを実行(確か、オブジェクトの生成と数値計算をしていた)という感じでした。セキュリティを考慮してファイルアクセスなどを制限されるということも書いてありました。

私の利用目的は、各種設定(型はまちまち)を集めたクラス(ツリー状に子クラスが定義してある)があり、そのクラスのフィールド(子クラスのフィールドも含む)をファイルから読み込んだパラメータで初期化するというものです。ファイルを読んでswitch等で場合分けをして、設定してやればいいのですが、煩雑さを考えると避けたいと思っています。

上記のAPIを用いれば
a.b.c.d = "xxx";
e.f = x.x;
g.h.i.j = new Font("DEFAULT", Font.ITALIC, 10);
の様に書いたファイルをAPIにかましてやるだけで、とても便利になるはずなのです...

代替案も含めて、ご存知の方がいらっしゃれば、教えて頂けると助かります。

Javaで書かれたプログラムの実行時にJavaのコードを文字列として取り込み実行できるAPIをどこかで見た気がしたのですが、紹介されていたサイトを忘れてしまい、発見できません。どなたかご存知でしたら教えてください。

サイトのニュアンスは、スタンドアロンのJavaアプリケーションまたはJavaAppletにテキストボックスがあり、そこにJava(Java scriptではない)コードを書いて、そのコードを実行(確か、オブジェクトの生成と数値計算をしていた)という感じでした。セキュリティを考慮してファイルアクセスなど...続きを読む

Aベストアンサー

これは、どうでしょう?
http://koala.ilog.fr/djava/

参考URL:http://koala.ilog.fr/djava/

QInterfaceを実装して、コンストラクタのエラー

もともと
Tempクラスで

public void a()
public String b()

という2つのメソッドと、

public Temp(String s)

という一つのコンストラクタを持っていて、

public interface Tempinterface extends Remote
{
public void a() throws RemoteException;
public String b() throws RemoteException;
}
という中身のインターフェースを作り、

Tempクラスの一行目を

public class Temp extends UnicastRemoteObject implements Tempinterface

に変更しました。
今コンパイルの時点で、
public Temp(String s)
のコンストラクタで
「unreported exception: java.rmi.RemoteException; must be caught or declared to be thrown」
というエラーが出ています。

インターフェースの中に
public Temp(String s) throws RemoteException;
という一行を加えたらメソッドじゃないから駄目、
と言われて、

Tempクラスのコンストラクタの中で
try、catchしてみたらそんなExceptionは出ない、
と言われて困っています。
これはどうすればいいのでしょうか?

もともと
Tempクラスで

public void a()
public String b()

という2つのメソッドと、

public Temp(String s)

という一つのコンストラクタを持っていて、

public interface Tempinterface extends Remote
{
public void a() throws RemoteException;
public String b() throws RemoteException;
}
という中身のインターフェースを作り、

Tempクラスの一行目を

public class Temp extends UnicastRemoteObject implements Tempinterface

に変更しました。
今コンパイルの時点で、
...続きを読む

Aベストアンサー

TempのコンストラクタにRemoteExceptionをスローするようにしたら、コンパイル出来るんじゃないですか
TempクラスのスーパークラスであるUnicastRemoteObjectクラスのコンストラクタが全て、RemoteExceptionをスローしてるんで、その継承したTempのも必要なのでは


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報