[JAVA]コネクタ


抽象クラスの制限

  • Javaクラス間の継承には、親クラスが1つしかありません.
    多重継承の実現は不可能である.
  • ですが、インタフェースは多重継承できます.
  • 📝 インタフェース

  • は抽象クラスです.
  • は、構成メンバーとして抽象メソッドと定数のみを使用します.
  • は多重継承可能であるため、用途に応じて細分化され、必要な要素のみが継承される.
  • インタフェースの利点

  • の開発時間を短縮できます.
  • は標準化可能である.
  • は関係のない階級に関係を築くことができる.
  • は独立してプログラミングすることができる.
  • インタフェースの定義


  • クラスの作成と同じです.
    ただし、classキーワードではなくインタフェースを使用する必要があります.

  • インタフェース内のすべてのメソッドは抽象メソッドであるため、abstractキーを指定する必要はありません.
  • public interface 인터페이스명 {
    
    	public 리턴타입 메서드명(파라미터,...);
    
    }

    インタフェースの継承


  • インタフェースの継承にはimplementsキーワードが使用されます.

  • インタフェースも抽象化されているので,インタフェースのクラスを継承する.
    インタフェース内のすべてのメソッドを再定義する必要があります.

  • クラスと異なり,インタフェースにはObjectクラスのような上位クラスはない.

  • 多重継承が可能です.
  • インタフェースはカンマ(,)で接続され、複数を同時に継承できます.
  • が必要な場合は、他のカテゴリと同時に継承できます.
  •   // 콤마(,)로 연결하여 동시에 상속한 경우
      public class Monster implements Fight, Move {
      	...
      }   
    
      // 다른 클래스와 동시에 상속한 경우
      public class Monster extends User implements Fight, Move{
    	  ...
      }

    インタフェースの例

    public abstract class Unit{
    		public abstract void attack();		// 공격
    		public abstract void shield();		// 방어
    		public abstract void walk();		// 걷다
    		public abstract void run();			// 뛰다	
    		public abstract void jump();		// 점프
    		public abstract void pickup();		// 아이템 줍기
    	}
    抽象クラスUnitクラスがあります.

    主人公とモンスターのレベルがユニットを引き継ぐと
    主役クラスはUnitのすべての機能を使用します.
    モンスター類に使用しない機能を再定義する必要があるという問題が発生しました.

    そこで,抽象クラスUnitの機能を用途別に分割する.
    主人公とモンスターがそれぞれのスキルの中で必要なものだけを受け継ぐようにする.
    以下をクラス図で表す.

    コードの例

    // Action 인터페이스
    public interface Action {
    	
    	public void pickup();		// 줍다
    	
    }
    
    // Fight 인터페이스
    public interface Fight {
    
    	public void attack();		// 공격
    	public void shield();		// 방어
    	
    }
    
    // Move 인터페이스
    public interface Move {
    
    	public void walk();		// 걷기
    	public void run();		// 뛰기
    	public void jump();		// 점프
    	
    }
    // Monster 클래스 
    public class Monster implements Fight, Move{
    	private String name;				// 몬스터 이름
    
    	public Monster(String name) {		// 생성자
    		super();
    		this.name = name;
    	}
    	
        // 다음과 같이 메서드 재정의가 이루어지면 필요한 기능을 구현한다.
    	@Override
    	public void walk() {
    		System.out.println(this.name + " >> 걷다");
    	}
    
    	@Override
    	public void run() {
    		System.out.println(this.name + " >> 뛰다");
    	}
    
    	@Override
    	public void jump() {
    		System.out.println(this.name + " >> 점프");
    	}
    
    	@Override
    	public void attack() {
    		System.out.println(this.name + " >> 공격");
    	}
    
    	@Override
    	public void shield() {
    		System.out.println(this.name + " >> 방어");
    	}
    	
    }
    // Character 클래스
    public class Character implements Action, Fight, Move{
    	private String name;				// 캐릭터 이름
    
    	public Character(String name) {		// 생성자
    		super();
    		this.name = name;
    	}
    
    	@Override
    	public void attack() {
    		System.out.println(this.name + " >> 공격");
    	}
    
    	@Override
    	public void shield() {
    		System.out.println(this.name + " >> 방어");
    	}
    
    	@Override
    	public void pickup() {
    		System.out.println(this.name + " >> 아이템을 줍다");
    	}
    
    	@Override
    	public void walk() {
    		System.out.println(this.name + " >> 걷다");
    	}
    
    	@Override
    	public void run() {
    		System.out.println(this.name + " >> 뛰다");
    	}
    
    	@Override
    	public void jump() {
    		System.out.println(this.name + " >> 점프");
    	}
    	
    }
    // Main 클래스
    public class Main {
    
    	public static void main(String[] args) {
    		Character c = new Character("주인공");
    		
    		c.walk();
    		c.run();
    		c.attack();
    		c.shield();
    		c.pickup();
    		c.jump();
    		
    		System.out.println("------------------------------------");
    		
    		Monster m = new Monster("몬스터");
    		
    		m.attack();
    		m.shield();
    		m.walk();
    		m.run();
    		m.jump();
    		
    	}
    
    }
    👉 実行結果
    주인공 >> 걷다
    주인공 >> 뛰다
    주인공 >> 공격
    주인공 >> 방어
    주인공 >> 아이템을 줍다
    주인공 >> 점프
    ------------------------------------
    몬스터 >> 공격
    몬스터 >> 방어
    몬스터 >> 걷다
    몬스터 >> 뛰다
    몬스터 >> 점프

    📙 整理する


    一般クラス抽象クラスインタフェースの作成者、メンバー変数不可(定数のみ)一般メソッド抽象メソッド不可