勉強の記録したことを、自分の記録としても残しておこうと思う。
可能な限りシンプルな例で、言語の仕様などを理解できるように書いていこうと思う。
前提
JVMはインストールされている前提とする。開発する環境はいろいろあるとは思うが(実際自分のパソコンにもSTSが入っているが)、愚直にコマンドラインからコンパイルを行っていく。
クラスの継承
Jobsというクラスを継承して、EngineerやPolice、Firefighter、Doctorといった子クラスを作っていくことを考える。(まずはEngineerをつくるので、Policeなどはまだつくらないかもしれないが)
まず、Jobsクラスをつくる。
//Jobs.javaというファイル名にする。 //クラス名とファイル名は同じにしなければいけない。 public class Jobs{ int salary; }同様に、Engineerクラスを作る。
//Engineer.javaというファイル名にする。 //クラス名とファイル名は同じにしなければいけない。 public class Engineer extends Jobs{ Engineer(){ salary = 50; } }この二つのファイルを作成し、同じディレクトリに置いておく。
コマンドでカレントディレクトリ(この二つのファイルが置いてあるディレクトリ)に移動したら、以下のようにコマンドを打つ。
$javac Engineer.javaそうすると、同じディレクトリに、Jobs.classというファイルと、Engineer.classというファイルが作成される。
今回の場合、何かを行うわけではないので(コンソールに表示したりとか)、「無事コンパイルできました」というところで話は一区切りとなる。
$javac Jobs.java Engineer.javaとしてもよいが、Engineer.javaだけでも同じこと。
コンパイルが失敗する例
コンパイルできない例も書いておく。Jobsクラスは以下のようにする。(フィールドは何も宣言しない。)
//Jobs.javaというファイル名にする。 //クラス名とファイル名は同じにしなければいけない。 public class Jobs{ }Engineerクラスは同じ。(だけどもう一度書いておく。)
//Engineer.javaというファイル名にする。 //クラス名とファイル名は同じにしなければいけない。 public class Engineer extends Jobs{ Engineer(){ salary = 50; } }これで、同じく
$javac Engineer.javaと打つ。
そうすると、以下のようなエラーが吐かれる。
Engineer.java:5: エラー: シンボルを見つけられません salary = 50; ^ シンボル: 変数 salary 場所: クラス Engineer エラー1個salaryという変数は親クラスでも子クラスでも宣言されていないからだ。
余談
本題とは少し関係ないが、やらかした凡ミスも書いておく。本当に初歩の初歩のミスだが、extendsのところをsを抜かしてextendにしてしまってコンパイルできなかったことがあった。
//Engineer.javaというファイル名にする。 //クラス名とファイル名は同じにしなければいけない。 public class Engineer extend Jobs{ Engineer(){ salary = 50; } }これでコンパイルをしようとすると以下のようなエラーが出される。
Engineer.java:1: エラー: '{'がありません public class Engineer extend Jobs{ ^ エラー1個
0 件のコメント:
コメントを投稿