[JAVA]コネクタ
抽象クラスの制限
多重継承の実現は不可能である.
📝 インタフェース
インタフェースの利点
インタフェースの定義
クラスの作成と同じです.
ただし、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();
}
}
👉 実行結果주인공 >> 걷다
주인공 >> 뛰다
주인공 >> 공격
주인공 >> 방어
주인공 >> 아이템을 줍다
주인공 >> 점프
------------------------------------
몬스터 >> 공격
몬스터 >> 방어
몬스터 >> 걷다
몬스터 >> 뛰다
몬스터 >> 점프
📙 整理する
一般クラス抽象クラスインタフェースの作成者、メンバー変数不可(定数のみ)一般メソッド抽象メソッド不可
Reference
この問題について([JAVA]コネクタ), 我々は、より多くの情報をここで見つけました https://velog.io/@hyun_ha/JAVA-인터페이스-Interfaceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol