親子におすすめの新型プラネタリウムとは?

javaで、別クラスの変数を使うにはどうしたらできますか?!
あるクラスで
public String hour ="";
のhourという変数を別のクラスで使いたいです。
どなたかよろしくおねがいします><

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

A 回答 (2件)

つまり


--- A.java ---
public class A {
 public String hour="";
}

--- B1.java ---
public class B1 {
 public static void main(String[] vars){
  A a = new A();
  a.hour = "ten";
  System.out.println(a.hour);
 }
}
ということ?それとも
--- B2.java ---
public class B2 {
 private A a_;

 public B2(A a){
  a_ = a;
 }

 public static void main(String[] vars){
  A a = new A();
  a.hour = "ten";
  B2 b = new B2(a);
  b.useClassA();
 }

 private void useClassA(){
  System.out.println(a.hour);
 }
}
ということ?

とりあえずどちらもAというクラスのhourという変数をB1またはB2というクラスの中で使用しています。
(ただし、インデントを全角スペースで行っているためコピペしただけの状態ではコンパイルできません)
ただし、普通は他のクラスの変数を直接アクセスできるようにはしません。
そのかわりゲッター・セッターと呼ばれるメソッドを作成して変数値の取得・変更をそこで行い、変数のアクセス指定はprivateにします。
どうしてそうするかは「カプセル化」という語句を調べてみてください。
    • good
    • 1

public class Q7594581 {


public static void main(String[] args) {
Q7594581sub instance = new Q7594581sub();
System.out.println(instance.hour);
}
}
class Q7594581sub {
public String hour = "";
}
    • good
    • 1

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Q違うクラスからの変数の共有化

一つのクラスの中にある変数の値を、二つの別なクラスから呼び出して、その二つのクラスのどちらから変数を参照しても同じ値が帰ってくるようにしたいのですが、いろいろ調べてもできなかったので質問させていただきますm(_ _)m

// 共有化させたい変数を持つクラス
// Var.java
public class Var{
 public static int i;

 public Var(int i){ this.i = i; }
 public Var(){}

 public static void getI(){
  return i;
 }
}

//クラス1
//Class1.java
public class Class1{
 Var var = new Var(1);
}

//クラス2
//Class2.java
public class Class2{
 Var var = new Var();

 System.out.println(var.getI());
}

とした場合、Class1を実行し、次にClass2を実行すると、クラス1で定義した変数の値である 1 が戻ってくるようにしたいのですが、上記の方法では、Class2を実行すると結果は 0 になってしまいました。
まだまだ習い始めたばかりでいまいちstaticを使い切れていないと思います・・・

たとえば、PrintStreamクラスの
public static final PrintStream out
というのはどこから参照しても同じ結果なのでそのようなやり方で大丈夫だろうと思ったのですが・・・

このような方法では共有化させることはできないのでしょうか?またできないのでしたらほかのやり方がもしあった場合は教えていただきたいと思います。
どうかお願いします。

一つのクラスの中にある変数の値を、二つの別なクラスから呼び出して、その二つのクラスのどちらから変数を参照しても同じ値が帰ってくるようにしたいのですが、いろいろ調べてもできなかったので質問させていただきますm(_ _)m

// 共有化させたい変数を持つクラス
// Var.java
public class Var{
 public static int i;

 public Var(int i){ this.i = i; }
 public Var(){}

 public static void getI(){
  return i;
 }
}

//クラス1
//Class1.java
public class Class1{
 Var var...続きを読む

Aベストアンサー

Class1 のインスタンス
Var var = new Var(1);
Class2 のインスタンス
Var var = new Var();
これは、それぞれ別物を指しています(だって、自分で new と書いて新しく生成しているじゃないですか!)。

Class1 で値を入れた static 領域を Class2 で参照するには、

public class Class2{
// Var は大文字(クラス名)
 System.out.println(Var.getI());
}

とします。「クラス名.staticメンバ」という書式です。ただし、共有されるためには同じ Java VM 上実行されることが条件です。

※参考
public Var(int i){ this.i = i; }
この書き方は実行はできますが、意味的には正しくありません。staticメンバ は new しないでアクセスされることが前提なので、
Var.setI(i);
Var.i = 1;
というような書き方が良いと思います(new はしません)。

Class1 のインスタンス
Var var = new Var(1);
Class2 のインスタンス
Var var = new Var();
これは、それぞれ別物を指しています(だって、自分で new と書いて新しく生成しているじゃないですか!)。

Class1 で値を入れた static 領域を Class2 で参照するには、

public class Class2{
// Var は大文字(クラス名)
 System.out.println(Var.getI());
}

とします。「クラス名.staticメンバ」という書式です。ただし、共有されるためには同じ Java VM 上実行されることが条件です。

※...続きを読む

Qクラス間でのデータ参照

あるクラスでArrayListにデータを格納し、そのデータを別のクラスで使いたいと思っています。

Javaでそれをするために、どのようにすればよいのでしょうか?

何か知識がある方教えてください。

Aベストアンサー

> つまり、教えてもらった方法は、
> *リストを作るクラス
> *そのリストを使って処理をするクラス
> *命令を出すクラス
> の三つに分かれているということですか?

はい、
Aru: リストを作るクラス
Betsu~3: そのリストを使って処理をするクラス
です。

別のクラスがあるクラスのインスタンスの生成から管理していれば,
命令を出すクラスを作らずともかまいません。
class Betsu4 {
public void shori() {
Aru aru = new Aru();
aru.createList();
ArrayList list = aru.getList();
}
}

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

QJava 他クラスの呼び出しが上手くいきません。

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
import com.nttdocomo.ui.*;

public class Test01 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p1 = new Panel();
p1.setTitle("p1");
Label lbl1=new Label("p1に居ます。");
p1.add(lbl1);
Button btn1=new Button("next");
p1.add(btn1);
p1.setComponentListener(this);
Display.setCurrent(p1);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
Test02 test02 =new Test02(); //ここでエラーが発生します。
Display.setCurrent(test02);
lbl1.setText("p2に遷移");
}
}
}

}

============
Test02.java
============
import com.nttdocomo.ui.*;

public class Test02 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p2 = new Panel();
p2.setTitle("p2");
Label lbl1=new Label("p2に居ます。");
p2.add(lbl1);
Button btn1=new Button("next");
p2.add(btn1);
p2.setComponentListener(this);
Display.setCurrent(p2);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。
}
}
}

}

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
impo...続きを読む

Aベストアンサー

「シンボルを見つけられません。」でコンパイルできないのは、
Test01クラスからTest02クラスを見つけられないことが原因かと思われます。

No.1様は
==
Test01とTest02は同じパッケージですか?
違うのであればTest01にimport xxxx.Test02;を記述する必要がある
==
とおっしゃってるように思います。


原因がご理解できないようでしたら
まずはJavaの勉強をしたほうがよろしいかと思います。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Q別ファイルのclassの読み込みについて

Javaを勉強し始めたばかりのものです。
購入した参考書を見ながら勉強していますが、表題の件の項目で参考書ではうまくいくように表記されておりますが、実際にやってみると下記エラーが表示されます。

---------------------------------------------
C:\XXXXXXXXXX>javac ../../sample/Sample1.java
..\..\sample\Sample1.java:3: シンボルを見つけられません。
シンボル: クラス Car
場所 : Sample1 の クラス
Car car1 = new Car();
^
..\..\sample\Sample1.java:3: シンボルを見つけられません。
シンボル: クラス Car
場所 : Sample1 の クラス
Car car1 = new Car();
^
エラー 2 個

------------------------------------------------------

ちなみに下記はソースとなります。

--------------------------------------------
【Car.java】

//Carクラス
class Car {
privateintnum;
privatedoublegas;

public Car(){
num=0;
gas=0.0;
System.out.println("車を作成しました。");
}

public void setCar(int n, double g){
num=n;
gas=g;
System.out.println("ナンバーを" + num + "ガソリン量を" + gas + "にしました。");
}

public void show(){
System.out.println("車のナンバーは" + num + "です。");
System.out.println("ガソリン量は" + gas + "です。");
}
}

【Sample1.java】
class Sample1 {
public static void main (String args[]){
Car car1=new Car();
car1.show();
}
}
---------------------------------------------------

なんとなくエラーが出るだろうとはわかりますが、上記の記載方法だとやはりうまくいかないのでしょうか?

お忙しいところ申し訳ありませんが、どなたかご教示の程お願いいたします。

Javaを勉強し始めたばかりのものです。
購入した参考書を見ながら勉強していますが、表題の件の項目で参考書ではうまくいくように表記されておりますが、実際にやってみると下記エラーが表示されます。

---------------------------------------------
C:\XXXXXXXXXX>javac ../../sample/Sample1.java
..\..\sample\Sample1.java:3: シンボルを見つけられません。
シンボル: クラス Car
場所 : Sample1 の クラス
Car car1 = new Car();
^
..\..\samp...続きを読む

Aベストアンサー

クラスパスが正しくないと見受けられます。

参考書通りの、ディレクトリ構成、クラスパスの設定になっていますか?
見落としがないかよく確認してみて下さい。

それでも駄目なら、
ディレクトリ構成と、クラスパスの設定を教えて下さい。
その際は、必ずコピペで。

Q非staticフィールドを参照できない理由とは

 java勉強中です、宜しくお願いします。

 下のようなプログラムを書き「Test1」をコメントアウトしたら、
「非staticフィールドをstatic参照できません。」というエラーが
出ました。
 「Test1 t」をグローバル変数で定義したのですが、やはりを
「static」からは見れないということでしょうか。

 「main」は特別な関数というのは分るのですが、staticフィールドとか
クラスオブジェクトしか、main()からは覗けないという設計思想(?)
とかはどのようなものなのでしょうか。

 逆に覗けるのが可能ならばどのような不都合が生じるのでしょうか。

 何かしら非常に不便を感じて使い勝手が悪いという気がして仕方ない
のですが、特別にこうしなけらばならないとか、今までの他の言語であ
った不具合(ex 隠蔽機能)を更に強化したためとかと言う理由があるの
でしょうか。 

==========================================================

public class Test1
{
Test1 t;

void calc()
{
int a = 2;
int b = 3;

System.out.println(a+b);
}

public static void main(String args[])
{
/*Test1*/ t = new Test1();
t.calc();
}
}

 java勉強中です、宜しくお願いします。

 下のようなプログラムを書き「Test1」をコメントアウトしたら、
「非staticフィールドをstatic参照できません。」というエラーが
出ました。
 「Test1 t」をグローバル変数で定義したのですが、やはりを
「static」からは見れないということでしょうか。

 「main」は特別な関数というのは分るのですが、staticフィールドとか
クラスオブジェクトしか、main()からは覗けないという設計思想(?)
とかはどのようなものなのでしょうか。

 逆に覗けるのが可能ならば...続きを読む

Aベストアンサー

> 私が更に疑問を持ったのは、何故javaに「static」という定義(考え方)があるのか、また
> 「main」をstaticにしてやる必要があるのか、という内容についてです。

本当にそういうことを知りたいというよりは、staticなmain()メソッドからインスタンス変数に直接アクセスできないことが不満であるだけのように読めます。

しかし、staticメソッドからでもインスタンス変数にアクセスすることはできるんです。「どのインスタンスが持っているインスタンス変数」にアクセスしたいのかを指定する必要があるだけです。

public static void main(String args[])
{
Test1 x = new Test1();
/* 変数xに代入されているインスタンスのtにアクセスする */
x.t = ~;
}

もっとも、質問文にある内容ならば変数tはmain()メソッドのローカル変数のままにするか、Test1クラスのクラス変数にしてしまえばそれで良さそうです。インスタンス変数にしたい理由がありますか?

public class Test1
{
static Test1 t; /* クラス変数 */

public static void main(String args[])
{
t = new Test1();
t.calc();
}

/* calc()メソッドの定義は省略*/
}

> 私が更に疑問を持ったのは、何故javaに「static」という定義(考え方)があるのか、また
> 「main」をstaticにしてやる必要があるのか、という内容についてです。

本当にそういうことを知りたいというよりは、staticなmain()メソッドからインスタンス変数に直接アクセスできないことが不満であるだけのように読めます。

しかし、staticメソッドからでもインスタンス変数にアクセスすることはできるんです。「どのインスタンスが持っているインスタンス変数」にアクセスしたいのかを指定する必要があるだけです...続きを読む

QJava初心者です、エラーの意味が理解できません

今晩は。Java初心者です、宜しくお願いします。
下のようなコードを書きましたが、
「コンストラクタ'sub(int)'は未定義です」、
「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。
エラーの意味が理解できません。
1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。
2.Subには自動的にコンストラクタが生成されないのでしょうか。
  されないとすれば、どの部分の書き方が悪いのでしょうか。
3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。
それとも全てコンストラクタの生成が原因なのでしょうか。

=========================================================================

class Sub
{
void disp(int a)
{
System.out.println("a = " + a );
}
}

public class クラス
{
public static void main(String[] args)
{
Sub s = new Sub(10);//コンストラクタ'sub(int)'は未定義です
s.disp();    //型subのメソッド'disp(int)'は引数()に適用出来ません 
}
}

今晩は。Java初心者です、宜しくお願いします。
下のようなコードを書きましたが、
「コンストラクタ'sub(int)'は未定義です」、
「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。
エラーの意味が理解できません。
1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。
2.Subには自動的にコンストラクタが生成されないのでしょうか。
  されないとすれば、どの部分の書き方が悪いのでしょうか。
3.「型subのメソッド'disp(int)'への引...続きを読む

Aベストアンサー

1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。
→問題ないです
 ただし、実現の方法がちょっと違います

2.Subには自動的にコンストラクタが生成されないのでしょうか。
→されます。自動的に生成されるコンストラクタは、”デフォルトコンストラクタ”と呼ばれます。この場合の”デフォルトコンストラクタ”は、”public Sub()”となり、引数がないコンストラクタです(引数がないコンストラクタをデフォルトコンストラクタと呼び出ます)。

  されないとすれば、どの部分の書き方が悪いのでしょうか。

→mainの、Sub s = new sub(10)に対応するコンストラクタを書く必要があります。
 class sub
{
public Sub(int a){
}
}

と書くことで、エラーは解消されます。

3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。
→はい。文法エラーですね。

void disp(int a)
{
System.out.println("a = " + a );
}

というメソッドを定義しているため、必ず、”s.disp(intの値);”で呼び出さないといけません。

”s.disp()”で、呼び出したい場合は、
void disp(){
・・・
}
の形式で書く必要があります。

1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。
→問題ないです
 ただし、実現の方法がちょっと違います

2.Subには自動的にコンストラクタが生成されないのでしょうか。
→されます。自動的に生成されるコンストラクタは、”デフォルトコンストラクタ”と呼ばれます。この場合の”デフォルトコンストラクタ”は、”public Sub()”となり、引数がないコンストラクタです(引数がないコンストラクタをデフォルトコンストラクタと呼び出ます)。

  されないとすれば、どの部...続きを読む


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

人気Q&Aランキング