すいません。
長い間、
疑問に思ってたことがあるんですけれども、
(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パッケージに入っているものとします。
No.3ベストアンサー
- 回答日時:
まず、最初に(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です。
No.2
- 回答日時:
すいません。
少し質問の焦点がつかみづらいですが以下のように考えると分かりやすいかもしれません。
インポートは使用されるクラスのディレクトリパスを示すだけ(少し違いますが)
質問の例では
extends aiueo を
extends javax.swing.aiueo にすれば
インポート不要。
Aメソッドを使うのであれば継承(extends)は必須。
インポート有無は関係しない。
答えになってますか?
この回答への補足
どこがわからないのか自分でもわからない状態になっていたので、質問がわかりにくかったのかもしれないです。
そこで、よーく考えてみたんですけども、おそらく僕がわからないところというのはここの部分なのかもしれません。(他人事みたいで恐縮ですが)
(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)の場合は当然呼び出せますよね?
No.1
- 回答日時:
java はあんまり詳しくないのですが、知ってる範囲で。
パッケージと継承は直接関係ないですよ。
あるクラスから派生したクラスを書こうとした場合に、
その元が分からないと駄目なので、そのクラスを持っている
パッケージを import する。
(1) は、クラス Sample が Aメソッドを持っていなければ
コンパイルできない。
(3) は、クラス aiueo が何者なのか分からないので、
コンパイルできない。
(2) は、クラス Sample で Aメソッドを持っていなければ、
クラス aiueo の Aメソッドが呼ばれる。
この回答への補足
あー、もうちょっとでわかるような気が・・。
なにぶん自分でもどこがわからないのかがわからない状態なので、a-kumaさんにはご迷惑をかけてしまったかもしれませんね。でも、とっても参考になりました。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java eclipse実行ができない 2 2022/07/27 04:47
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipse実行ができない
-
配列にnullを代入すると、null...
-
正規表現について質問です。 カ...
-
JaneStyleのスレッドが見れなく...
-
複数TBLのオブジェクトを1つの...
-
マイクラでPythonのプログラミ...
-
CSV出力を画面から選択したデー...
-
下記問題の答えが"D"になる意味...
-
jdk17.06のインストーラーが起...
-
リレーションエンティティクラ...
-
直し方について教えて頂きたい...
-
JAの支部?地域の農協のカード...
-
ショートカットキーについて
-
プログラミングの問題です。大...
-
えハミルトン路と全域木のちが...
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
JAの支部?地域の農協のカード...
-
eclipse実行ができない
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
正規表現について質問です。 カ...
-
list の空は [] ってあわらすのに
-
「main メソッドを持つクラスが...
-
あんまりお料理しないのに台所...
-
JaneStyleのスレッドが見れなく...
-
jdk17.06のインストーラーが起...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
キー入力について
-
CSV出力を画面から選択したデー...
-
Processingでマウスクリックで...
-
次のhtml・cssでspan内の文字を...
-
JSFタグのfタグとは
おすすめ情報