こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

GetterとSetterをやったのに。

以下のプログラムを実行すると、フィールドA.aは不可視です。メソッドtestは型Aで不可視です。というエラーが出てきます。本に書いてあるとおり、やったのですが、どうしてダメなのかわかりません。ぜひ教えてください。

public class Sample {

public static void main(String[] args) {
A aa=new A();
System.out.println(aa.a);
aa.test();
}

}
class A{
private String a = "A";

private void test(){
System.out.println("Test");
}

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}
}

投稿日時 - 2006-05-04 17:14:34

QNo.2130774

暇なときに回答ください

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

何をしようとされているのか
全くわかりませんが
これが A Testと表示
させるには

public class Sample {

public static void main(String[] args) {
A aa=new A();
String b=aa.getA();
System.out.println(b);
aa.test();
}

}
class A{
private String a = "A";

public void test(){
System.out.println("Test");
}

public String getA() {
return a;
}

public void setA(String a) {
this.a = a;
}
}

投稿日時 - 2006-05-04 18:40:26

お礼

ありがとうございます。
ところで、public void test()でなく、private void test()のままで、できる方法はないでしょうか?

投稿日時 - 2006-05-05 16:12:36

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

>private void test()のままで、できる方法はないでしょうか

privateなのでそのクラス(class A)以外からは
アクセスできないので無理な要求の様に思われ
ます。最近 掟破りな方法はないかと

求められるようなご質問がありますが
それほどは詳しくないものでお気持ちや何か特殊な
状況をそれなりに感じておりますが今後の課題と
させて頂きます。

投稿日時 - 2006-05-05 18:51:01

ANo.4

public class Sample {
public static void main(String[] args) {
A aa=new A();
System.out.println(aa.getA());//変更(aa.aをaa.getA()に
aa.test();
}
}
class A{
private String a = "A";
public void test(){
System.out.println("Test");
}
public String getA() {//変更(privateをpublicに
return a;
}
public void setA(String a) {
this.a = a;
}
}

投稿日時 - 2006-05-04 22:47:54

ANo.3

これは、エラーになる(サンプルの)ソースだと思います。
インスタンスのプライベートメンバである a に
System.out.println(aa.a);
のように直接アクセスはできませんよ、(できないようにしました、しましょう)
そのかわり、
aa.getA() のようにアクセサー を定義してそれを使って呼び出しましょうというようなことを示しているんだと思います。
同じく、
aa.test();
もプライベートメソッドは、外部から呼び出せません(やってみれば、エラーになりますよ)というサンプルなんだと思います。

投稿日時 - 2006-05-04 20:39:10

ANo.1

>フィールドA.aは不可視です。メソッドtestは型Aで不可視です。というエラーが出てきます。

ソースコードを見ましたが、それが正しい反応です。フィールドaもメソッドtestもprivateになっています。privateなものは、外部からアクセスできません。したがって、エラーになるのが正常です。

>本に書いてあるとおり、やったのですが、どうしてダメなのかわかりません。

その本の内容がどうなっているかわからないのでなんともいえないんですが・・・。「動かないサンプル」として掲載されているとか、あるいは単純にどこか写し間違っているとか、そういうことではないでしょうか。
もう一度、そのあたりの記述をよく読み返してみてはいかがでしょう。(これ以上のことは、その本が何かもわからないので・・・)

投稿日時 - 2006-05-04 18:13:46