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型である...
---------------------------------------------------