Javaゼミ第7回直江担当
演習問題解答例
---------------------------------------------------
問1
[インターフェイスと継承を利用して計算]

interface A{
	String s_a="Interface A" ;
 	void disp() ;
}
interface B{
	String s_b="Interface B" ;
 	int sum() ;
}
interface C extends A,B,D,E{
	String s_c="Interface C" ;
	int sub() ;
}
interface D{
	String s_d="Interface D" ;
	int pro() ;
}
interface E{
	String s_e="Interface E" ;
	int div() ;
}
class Calc implements C{
	int a,b ;
	Calc(int a,int b){
		this.a=a ;
		this.b=b ;
	}
 	public void disp(){
 		System.out.println("a = "+this.a+" , b = "+this.b) ;
 	}
 	public int sum(){
 		return this.a+this.b ;
 	}
 	public int sub(){
 		return this.a-this.b ;
 	}
	public int pro(){
		return this.a*this.b ;
	}
	public int div(){
		if(this.a==0){
			System.out.println("0で除算されます...") ;
			return 0 ;
		}
		return this.a/this.b ;
	}
}

public class test1 {
	static public void main(String args[]){
		int a=Integer.valueOf(args[0]).intValue() ;
		int b=Integer.valueOf(args[1]).intValue() ;
		Calc m=new Calc(a,b) ;
		m.disp() ;
 		System.out.println("a + b = "+m.sum()) ;
 		System.out.println("a + b = "+m.sub()) ;
 		System.out.println("a + b = "+m.pro()) ;
 		System.out.println("a + b = "+m.div()) ;
	}
}


[出力結果](入力:8 2)
a = 8 , b = 2
a + b = 10
a + b = 6
a + b = 16
a + b = 4
---------------------------------------------------
問2
[abstract,interfaceを利用して2次元座標値、3次元座標値を計算]

abstract class Figure{
	int a[] ;
	int b[] ;
}
interface Calc{
	void Sum() ;
}

class Fig_2D extends Figure implements Calc{
	Fig_2D(){
		this(1,1,1,1) ;
	}
	Fig_2D(int x1,int y1,int x2,int y2){
		this.a=new int[2] ;
		this.b=new int[2] ;
		this.a[0]=x1 ; this.a[1]=y1 ;
		this.b[0]=x2 ; this.b[1]=y2 ;
		System.out.println("vector a=("+this.a[0]+","+this.a[1]+")") ;
		System.out.println("vector b=("+this.b[0]+","+this.b[1]+")") ;
	}
	public void Sum(){
		System.out.print("a+b=(") ;
		for(int i=0;i<2;i++){
			System.out.print(this.a[i]+this.b[i]) ;
			if(i!=1)System.out.print(",") ;
		}
		System.out.println(")") ;
	}
}
class Fig_3D extends Figure implements Calc{
	Fig_3D(){
		this(1,1,1,1,1,1) ;
	}
	Fig_3D(int x1,int y1,int z1,int x2,int y2,int z2){
		this.a=new int[3] ;
		this.b=new int[3] ;
		this.a[0]=x1 ; this.a[1]=y1 ; this.a[2]=z1 ;
		this.b[0]=x2 ; this.b[1]=y2 ; this.b[2]=z2 ;
		System.out.print("vector a=("+this.a[0]+",") ;
		System.out.println(this.a[1]+","+this.a[2]+")") ;
		System.out.print("vector b=("+this.b[0]+",") ;
		System.out.println(this.b[1]+","+this.b[2]+")") ;
	}
	public void Sum(){
		System.out.print("a+b=(") ;
		for(int i=0;i<3;i++){
			System.out.print(this.a[i]+this.b[i]) ;
			if(i!=2)System.out.print(",") ;
		}
		System.out.println(")") ;
	}
}

public class test2 {
	static public void main(String args[]){
		/*
		 * Figure型でオブジェクトを作成すると
		 * Sum()メソッドの使用が不可になる。
		 * 理由として...
		 * FigureクラスにはSum()メソッドが
		 * 実装されていないために起こるため。
		 */
		Calc f=new Fig_2D(1,2,3,4) ;
		f.Sum() ;
		f=new Fig_3D(1,2,3,4,5,6) ;
		f.Sum() ;
	}
}


[出力結果]
vector a=(1,2)
vector b=(3,4)
a+b=(4,6)
vector a=(1,2,3)
vector b=(4,5,6)
a+b=(5,7,9)
---------------------------------------------------
問3
[interfaceとクラスの実装確認]

interface I1{
	void disp1() ;
}

interface I2{
	void disp2() ;
}

interface I3 extends I1,I2{
	void disp3() ;
}

interface I4{
	void disp4() ;
}

class X implements I3{
	public void disp1(){
		System.out.println("interface:I1") ;
	}
	public void disp2(){
		System.out.println("interface:I2") ;
	}
	public void disp3(){
		System.out.println("interface:I3") ;
	}
}

class W extends X implements I4{
	public void disp4(){
		System.out.println("interface:I4") ;
	}
}

public class test3{
	static public void main(String args[]){
		W w=new W() ;
		System.out.println("以下のインターフェイスを実装している...") ;
		if(w instanceof I1){
			w.disp1() ;
		}
		if(w instanceof I2){
			w.disp2() ;
		}
		if(w instanceof I3){
			w.disp3() ;
		}
		if(w instanceof I4){
			w.disp4() ;
		}
		if(w instanceof X){
			System.out.println("また、このオブジェクトはX型である...") ;
		}
	}
}


[出力結果]
以下のインターフェイスを実装している...
interface:I1
interface:I2
interface:I3
interface:I4
また、このオブジェクトはX型である...
---------------------------------------------------