• ベストアンサー

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; } }

  • corpus
  • お礼率79% (330/414)
  • Java
  • 回答数5
  • ありがとう数2

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

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

何をしようとされているのか 全くわかりませんが これが 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; } }

corpus
質問者

お礼

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

その他の回答 (4)

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.5

>private void test()のままで、できる方法はないでしょうか privateなのでそのクラス(class A)以外からは アクセスできないので無理な要求の様に思われ ます。最近 掟破りな方法はないかと 求められるようなご質問がありますが それほどは詳しくないものでお気持ちや何か特殊な 状況をそれなりに感じておりますが今後の課題と させて頂きます。

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.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; } }

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

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

noname#49664
noname#49664
回答No.1

>フィールドA.aは不可視です。メソッドtestは型Aで不可視です。というエラーが出てきます。 ソースコードを見ましたが、それが正しい反応です。フィールドaもメソッドtestもprivateになっています。privateなものは、外部からアクセスできません。したがって、エラーになるのが正常です。 >本に書いてあるとおり、やったのですが、どうしてダメなのかわかりません。 その本の内容がどうなっているかわからないのでなんともいえないんですが・・・。「動かないサンプル」として掲載されているとか、あるいは単純にどこか写し間違っているとか、そういうことではないでしょうか。 もう一度、そのあたりの記述をよく読み返してみてはいかがでしょう。(これ以上のことは、その本が何かもわからないので・・・)

関連するQ&A

  • getter、setterメソッドを活用したいです

    Javaのgetter、setterメソッドをうまく使って、下記のコードを実行しようとしたのですが。 ---------------- package javatest; public class Jidosha { private int num; private double gas; public void setNum(int num) { this.num = num; } public void setGas(double gas) { this.gas = gas; } public int getNum() { return num; } public double getGas() { return gas; } public static void main(String args[]) { System.out.println("この車のナンバーは" + num + "です。"); System.out.println("この車のガソリンが入る最大量は " + gas + "です。"); } } ---------------- Eclipse上では「System.out.println・・・」のところで「非 static フィールド gas を static 参照できません」といったエラーが出てきまして。 getter、setterメソッドをうまく活用して「この車のナンバーは××××です」「この車のガソリンが入る最大量は〇〇〇〇です。」という文を出力するには、どう書けばよいでしょうか。 よろしくお願い致します。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • 参照・値渡しについて

    下記プログラム(ソース1)を実行すると「1」という値が出力されます。しかし、2行目をprivate static int a;とすると「0」という値が出力されます。 オブジェクトは参照渡しで基本データ型は値渡しと思ったのですが、2行目の値をString型で行ったところ全く変更されていない値が出力されました。(ソース2) 一体どういうことでしょうか? 回答のほどよろしくお願い致します。 (ソース1) public class X{ private static int a[] = new int[1]; public static void main(String []args){ modify(a); System.out.println(a[0]); } public static void modify(int a[]){ a[0]++; } } (ソース2) public class X{ static String a = "a"; public static void main(String []args){ modify(a); System.out.println(a); } public static void modify(String a){ a = "b"; } }

    • ベストアンサー
    • Java
  • 小数点以下の表示が正しく表示されなくて困ってます

    public class test{ public static void main(String args[]){ double a = .05; System.out.println(a*3.0); } } というプログラムなんですけども。 アウトプットを表示すると >java test 0.15000000000000002 っというふうに表示されてしまいます。 プログラム自体を変えずに、0.15という表示を出したいのですが、どうしてもでません。誰か、教えていただければありがたいと思っています。よろしくお願いします。

    • ベストアンサー
    • Java
  • 静的メンバ、ネストクラス、enumのアクセス

    下記のコードを試した所、(1)(4)は無事動作しますが、 (2)と(3)はコンパイルエラーになってしまいます。 初め、静的メンバの場合はnullでも動作する事にすごい驚いたんですが、 どこまでなら問題なく動作するかのラインがわからなくてこまっています。もしよろしければアドバイスをよろしくお願いします。 class Test{ static String A="A"; static class B{ static String val = "B"; } enum C{A,B,C} } enum D{A,B,C} class Sta{ public static void main(String[] args){ Test y=null; D y2 = null; (1)System.out.println(y.A); (2)System.out.println(y.B.val); (3)System.out.println(y.C.A); (4)System.out.println(y2.C); }}

  • javaの質問です 合ってるかをお願いします

    間違ってる場合は何が正解かを教えてください。 よろしくお願いします 1 変数strには何が入っているか test 2 dataとstrの関係 わからないです。 public class Example5 { public static void main( String[] args ) { String data = "test."; hyouji( data ); } static void hyouji( String str ) { System.out.println( str ); } }

    • ベストアンサー
    • Java
  • Publicとは?

    お世話になります。 class A{ private int a; private int b; public void AA( int m, int n){ if( m > 0 && n > 0) a = m; b = n; } public void show(){ System.out.println( a + " " + b); } } public class B{ public static void main(String args[]){ A x = new A(); //x.a = 10; x.b = 20;は不可 x.AA(10, 20); x.show(); } } 上記のコードで、privateフィールドにはクラス外からアクセスは出来ないのは理解できます。 が、そこでpublic付きのメンバAAなりshowなりを用いて、フィールドに値を設定しているのですが、試しにこのpublicを外した場合実行されたのですが、今回このコード上publicメンバにする理由は何かあるのでしょうか?

    • ベストアンサー
    • Java
  • 動的に変数をセット後他クラスから参照する場合

    コンストラクタで変数にセットした後 他のクラスでインスタンスを生成することなく セットした変数を参照したいのですが、 staticにすると、他クラスで変数を変更することも できてしまいます。他の方法がありますでしょうか? 変数はprivateにして、getterで取得するという方法も 考えられますが、static finalな変数として扱う方法が あるか、お分かりの方いらっしゃいましたら教えてください。 Javaを初めて1ヶ月なので、見当違いの質問でしたらご指摘ください。 例) Class A{  static final String aaa; A(String paraStr){ aaa = paraStr; } } Class B{ static void main(String[] args){ new A("test"); } } Class C{ void chStr(){ System.out.println(A.aaa); A.aaa = "changeStr" System.out.println(A.aaa); } } 期待する値 test test もしくは、実行時にfinalの値は変更できない等のException 宜しくお願いします。

    • ベストアンサー
    • Java
  • この文章あっていますか?

    public class HelloWorld { public static void main(String[] args) { String message; message = "Hello Java World !"; System.out.println(message); } } これが正解文なのですが public class HelloWorld { public static void main(String[] args) { String message; message = "Hello java World"; System.out.ptintln(message); } } この文のどこが間違っていますか?ぜんぜんわからないので誰か教えてください。

    • ベストアンサー
    • Java
  • コンストラクタについて

    これも試験問題らしくて自分でやってみましたのであってるかどうか自信なくて どなたかみてみていただけたらと思います.よろしくお願いします。 下のソースファイルをコンストラクタを用いたものに修正しなさい class Sconst{ int x,y,z; void print(){ System.out.println(x); System.out.println(y); System.out.println(z); } } class ExConstTest{ public static void main (String[] args ){ Sconst sc=new Sconst(); sc.x=10; sc.y=30; sc.z=5; } } ------------------------------------------------------------- class Sconst{ int x,y,z; Sconst(){ x=10; y=30; z=5; } } class ExConstTest{ public static void main (String[] args ){ Sconst a1; Sconst a2; Sconst a3; a1=new Sconst(); a2=new Sconst(); a3=new Sconst(); System.out.println(a1.x); System.out.println(a2.x); System.out.println(a3.x); } }

    • ベストアンサー
    • Java
  • mainクラスのpublicの意味を教えて下さい

     お早う御座います、JAVA初心者です、宜しくお願いします。  main クラスの public をコメントアウトしてもエラーもなく走ります。  これは、「public static void main(String[] args)」を持っているクラスを自動的に「main クラス」と判断しているということでしょうか。 ============================================================ class Sub { void disp() { System.out.println(" a "); } } /*public*/ class Main { public static void main(String[] args) { Sub s = new Sub(); s.disp(); } }

    • ベストアンサー
    • Java

専門家に質問してみよう