-PR-
解決
済み

あれ?

  • 困ってます
  • 質問No.63421
  • 閲覧数35
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 11% (4/34)

すいません。
長い間、
疑問に思ってたことがあるんですけれども、

(1)
import javax.swing.*;

class Sample
{
 public static void main (String args[])
 {
  ........
  Aメソッド()
 }
}

(2)
import javax.swing.*;

class Sample extends aiueo
{
  public static void main (String args[])
 {
  ........
  Aメソッド()
 }
}

(3)
class Sample extends aiueo
{
 public static void main (String args[])
 {
   ........
  Aメソッド()
 }
}


の違いが、
考えれば考えるほどわからなくなってきました。
パッケージと継承の関係について、
どうやら理解できていないみたいです。
どなたか分かりやすく教えてください。
よろしくお願いします。

(注)
Aメソッドはaiueoクラスのメソッドとし、
aiueoクラスはjavax.swingパッケージに入っているものとします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル9

ベストアンサー率 62% (48/77)

まず、最初に(1)と(2)の違いからみてみましょう。
Javaの世界では(1)をアプリケーションと呼んでいます。public static void mainと
いうものを呼んでいるからです。これを書くことによってDOSプロンプトから
java Sample1 って書くとコンパイルしたこのプログラムが動き出します。動きとしては
myFrameをnewしますよという動きになります。(これはJavaの決まりごとです)
さてさて(2)ですが、こちらはJFrameを継承して作った新しいクラスになります。
JFrameの機能だけじゃものたりないからもうちょっと機能を足したいなと言うときに
JFrameの機能をもった新しいクラスを自分で作成するといった感じです。
なのでコンパイルはできますが、(1)と違ってjavaコマンドを使っても実行できません。

>JFrameクラスを拡張していないにもかかわらず、どうしてJFrameクラスを使うことができるんでしょうか

 import javax.swing.*; ってやっているからですね。
 importはどこどこにあるこのクラスの場所を教えるから使えるようにしてねという意味です。
 JFrameはjavaxという箱の中に入っているswingという箱の中に入っています。ご存知かもしれませんが
 *はswingという箱の中に入っているクラス全部使えるようにしてねという意味です。

>拡張していなくてもインポートしていれば、そのクラスのオブジェクトを作ることは可能なのでしょうか

 ということでこの質問はまさにそのとおりです。逆の言い方をすればクラスをどこかに書くときは
 そのクラスの場所を教えてあげないと(importしないと)いけませんということです。

>この(1)の場合、JFrameクラスのメソッドを呼び出すことは可能でしょうか?

 もちろん可能ですよ。JFrame myFrame = new JFrame("窓");で、myFrameというインスタンスを
 作りましたから、myFrame.メソッド名でOKです。
補足コメント
fumi11

お礼率 11% (4/34)

ようやく謎が解けました。
とてもわかりやすかったです。
本当にありがとうございました。
投稿日時 - 2001-04-15 10:27:15
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

java はあんまり詳しくないのですが、知ってる範囲で。 パッケージと継承は直接関係ないですよ。 あるクラスから派生したクラスを書こうとした場合に、 その元が分からないと駄目なので、そのクラスを持っている パッケージを import する。 (1) は、クラス Sample が Aメソッドを持っていなければ コンパイルできない。 (3) は、クラス aiueo が何者なのか分 ...続きを読む
java はあんまり詳しくないのですが、知ってる範囲で。

パッケージと継承は直接関係ないですよ。

あるクラスから派生したクラスを書こうとした場合に、
その元が分からないと駄目なので、そのクラスを持っている
パッケージを import する。

(1) は、クラス Sample が Aメソッドを持っていなければ
コンパイルできない。

(3) は、クラス aiueo が何者なのか分からないので、
コンパイルできない。

(2) は、クラス Sample で Aメソッドを持っていなければ、
クラス aiueo の Aメソッドが呼ばれる。
補足コメント
fumi11

お礼率 11% (4/34)

あー、もうちょっとでわかるような気が・・。
なにぶん自分でもどこがわからないのかがわからない状態なので、a-kumaさんにはご迷惑をかけてしまったかもしれませんね。でも、とっても参考になりました。本当にありがとうございました。
投稿日時 - 2001-04-14 11:50:49


  • 回答No.2
レベル5

ベストアンサー率 20% (1/5)

すいません。少し質問の焦点がつかみづらいですが 以下のように考えると分かりやすいかもしれません。 インポートは使用されるクラスのディレクトリパスを示すだけ(少し違いますが) 質問の例では extends aiueo を extends javax.swing.aiueo にすれば インポート不要。 Aメソッドを使うのであれば継承(extends)は必須。 インポート有無は関係し ...続きを読む
すいません。少し質問の焦点がつかみづらいですが
以下のように考えると分かりやすいかもしれません。

インポートは使用されるクラスのディレクトリパスを示すだけ(少し違いますが)

質問の例では
extends aiueo を
extends javax.swing.aiueo にすれば
インポート不要。

Aメソッドを使うのであれば継承(extends)は必須。
インポート有無は関係しない。
答えになってますか?
補足コメント
fumi11

お礼率 11% (4/34)

どこがわからないのか自分でもわからない状態になっていたので、質問がわかりにくかったのかもしれないです。
そこで、よーく考えてみたんですけども、おそらく僕がわからないところというのはここの部分なのかもしれません。(他人事みたいで恐縮ですが)

(1)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Sample1{
public static void main (String args[]){
     JFrame myFrame=new JFrame("窓")
 .....

(2)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Sample1 extends JFrame{
.....

(1)ではJFrameクラスのオブジェクトを作成していますが、JFrameクラスを拡張していないにもかかわらず、どうしてJFrameクラスを使うことができるんでしょうか?
もしかして、拡張していなくてもインポートしていれば、そのクラスのオブジェクトを作ることは可能なのでしょうか?また、この(1)の場合、JFrameクラスのメソッドを呼び出すことは可能でしょうか?(2)の場合は当然呼び出せますよね?
投稿日時 - 2001-04-14 11:15:55
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ