質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2205閲覧

java 基本 文法

Chandler_Bing

総合スコア673

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/06/15 04:31

java

1package main; 2 3public class Main { 4 5 public class Person { 6 String name; 7 8 public Person() { 9 10 } 11 12 public Person(String name) { 13 this.name = name; 14 } 15 16 public void disp() { 17 System.out.println("The name is " + name); 18 } 19 20 } 21 public class Engineer extends Person{ 22 String field; 23 24 public Engineer() { 25 26 } 27 public Engineer(String field) { 28 this.field = field; 29 } 30 31 public void disp() { 32 System.out.println("The field is " + name); 33 } 34 35 } 36 public static void main(String[] args) { 37 Person person = new Person(); 38 39 } 40}

コンパイルエラーで

error

1アクセス可能な型 Main のエンクロージング・インスタンスがありません。型 Main のエンクロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は Main のインスタンス)。

が出ます。
どう記述すれば良いでしょうか。
条件は満たしている気がするのですが。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

クラスの中にクラスを定義することもできはしますが、正しく使うには相応の知識が必要となります。

とりあえず、はじめのうちは「クラスの中にクラスを作らない」形で書き進めることをおすすめします。

投稿2019/06/15 04:36

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

staticでない内部クラスは、enclosing instance(外部インスタンス)に紐付いているのです。

Java

1class Outer { 2 private int outerVal; 3 Outer(int val) { 4 outerVal = val; 5 } 6 7 class Inner { 8 private int innerVal; 9 Inner(int val) { 10 innerVal = val; 11 } 12 13 void print() { 14 System.out.printf( 15 "Outer: %d, Inner: %d\n", outerVal, innerVal 16 ); 17 } 18 } 19} 20 21class Main { 22 public static void main(String[] args) { 23 { 24 Outer outer = new Outer(1); 25 26 Outer.Inner inner1 = outer.new Inner(99); 27 inner1.print(); 28 29 Outer.Inner inner2 = outer.new Inner(98); 30 inner2.print(); 31 } 32 { 33 Outer outer = new Outer(2); 34 35 Outer.Inner inner1 = outer.new Inner(99); 36 inner1.print(); 37 38 Outer.Inner inner2 = outer.new Inner(98); 39 inner2.print(); 40 } 41 } 42}

実行結果 Wandbox

plain

1Outer: 1, Inner: 99 2Outer: 1, Inner: 98 3Outer: 2, Inner: 99 4Outer: 2, Inner: 98

とりあえずエラーを消す為には、次の選択肢があります。

  • 外部クラスのインスタンスを指定して内部クラスのインスタンスを作る
  • 内部クラスをstaticにする
  • クラスを内部クラスで無くする

前述のコードの意味が分からないのであれば、
既にmaisumakunさんがおっしゃっているとおり最後の選択肢を選ぶべきと思います。

投稿2019/06/15 04:47

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

エンクロージングインスタンスが設定されていないので設定して下さい。
下記の記事にサンプルプログラムが掲載されているので参考にどうぞ。
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000994.html

投稿2019/06/15 04:41

marurunn

総合スコア702

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問