JAVA プログラミング 入門

JAVAのプログラミングについて初歩から解説します。まずは、mainメソッド、変数、演算、if文、for文、while文、メソッド、配列など。続いて、メソッドを複数構成して、プログラムを作成(非オブジェクト指向プログラミング)、しばらく後になると思いますが、オブジェクト指向プログラミングを解説します。 クラスの構成、コンストラクター、継承、・・・、など、本格的OOP(Object Oriented Programming)を解説します。

Java: package-パッケージ間のACCESS

Java: package-パッケージ間のACCESS

ここで扱うプログラムは以下の三つのソースファイルに分かれている。

1) Abst_Class1.java
このソースはabst_class1というパッケージに属する。
そこにはinterfaceが二つあり、inter1,inter2である。さらに、Abst_Class1というクラスが存在する。このクラスは2)のClass1に継承される。
2) Class1.java
このソースはclass1というパッケージに属する。ここにはAbst_Class1を継承したClass1というクラスが存在する。
3) Proo13_1.java
このソースはproo13_1というパッケージに属する。ここにはProo13_1というクラスが存在し、上記の二つのクラスを使う。


packageとはクラスを分類するjava の命令である。ソースプログラムの先頭で以下のように指定する。

package abst_class1;

そうすると、2行目以降のクラスがabst_class1 というパッケージに属することになる。パッケージはディレクトリーと一致させて作る。

作成したソースプログラムのファイル名をAbst_class1.javaとし、 abst_class1というパッケージに属する。カレントディレクトリの下にabst_class1というディレクトリを作り、その中にAbst_class1.javaのファイルを置く。そして、以下の操作をするとコンパイルされる。

>javac abst_class1\Abst_cass1.java

Abst_cass1.javaの中身は以下の通りである。

package abst_class1;
interface inter1{
   void show1();
   void show2();
}
public abstract class Abst_Class1 implements inter1
{   
	private int num1;
	protected Abst_Class1(int n){this.num1=n;}
   	public void show1(){
      System.out.println("show1 num1=" + num1 );
   }
	public abstract void show2();
}

説明:このパッケージにはインターフェースinter1があり、そこにメソッドが二つある。またAbst_Class1というabstractクラスがある。メソッドshow1はここで実装されている。しかし、メソッドshow2はabstractのままである。二つのメソッドはインターフェースから来ているので、publicにしてある。 Abst_Class1は別パッケージにある子クラスClass1から呼び出される予定であるので、protectedとしてある。num1は最大保護するためprivateとしてある。

続いて、class1のディレクトリを作りそこにClass1.javaを置き、以下のようにコンパイルする

>javac class1\Class1.java

Class1.javaの中身は以下の通りである。

package class1;
import abst_class1.*;
public class Class1 extends Abst_Class1 {
   private String s1;
	public Class1(int n, String s){
    	super(n);
      this.s1 = s;
   }
   public void show2(){
		show1();
      System.out.println("show2 s1="+s1);
   }
}

説明:
1行 ここにあるクラスは全てclass1というパッケージに属する。
2行 abst_class1のクラスを使うので、その中のパッケージをimportしている。*はその中のすべてのクラスを意味する。
5行 このコンストラクタは別パッケージから使われるので、publicにしている。勿論、Class1もpublicである。
9行 show2を実装している。

importについて:
これは指定されたパッケージの中のクラスをあたかも当該パッケージに移したごとく振舞えるということです。*の代わりにクラス名を指定するとそのクラスだけを移したかのようになるということです。

続いて、proo13_1のディレクトリを作りそこにProo13_1.javaを置き、以下のようにコンパイルする

>javac proo13_1\Proo13_1.java

Proo13_1.javaの中身は以下の通りである。

package proo13_1;
import abst_class1.*;
import class1.*;
class Proo13_1{
   public static void main(String args[]){
      Abst_Class1 f1 = new Class1(1, "Tokyo");
	   f1.show2();
   }
}
/* 出力
show1 num1=1
show2 s1=Tokyo
*/

説明:
2,3行 二つのパケージをimportしている。
末尾には実行結果がある。

全てコンパイルできたところで、以下のように実行する。
>java proo13_1.Proo13_1
実行結果はProo13_1.javaの末尾にある。

ACCESS修飾子protectedに関するACCESS制御は以下の二つの表の通りです。

f:id:Kurokawa_Tomio:20190712133840p:plain
図Proo13_1_ACCESS1
f:id:Kurokawa_Tomio:20190712133943p:plain
図Proo13_1_ACCESS2

JAVA PROGRAMMING 入門 TOP へ