[JAVA]抽象クラスとメソッド


抽象画とは何ですか。

  • 辞書は、エンティティ間の共通の特性を抽出することを意味する.
  • JAVAの抽象はクラスの重要と共通の性質を抽出した.
    これは親の等級を選定する概念です.
  • JAVAにおける抽象技術

  • の特定のクラスを継承した場合、
    これは親に特定の方法を無条件に再定義させる方法である.
  • に特定のメソッドの再定義を強制することにより、
    ガイドの役割を果たすことができます.
  • 、すなわち抽象化技術は、Javaクラスの設計図をソースコードとして作成する.
    ヒントの役割を果たす.
  • 抽象化された利点

  • が継承する簡潔なコード
  • 生産性と可読性の向上
  • エラー減少
  • メンテナンス時間短縮
  • コードの再利用性を向上させる
  • 📝 抽象クラス

  • クラスを設計図にたとえると、抽象クラスは未完成の設計図にたとえることができる.
  • 抽象クラスはオブジェクトを生成できません.継承して使用する必要があります.
  • 1つ以上の抽象メソッドを含むクラスは、「抽象クラス」でなければなりません.
    定義されるべきです.
  • 抽象クラスは他のサブクラスに「指導」の役割を果たす.
  • 抽象クラス宣言

  • 抽象クラス「abstract」キーワードを使用して定義できます.
  • 抽象クラスは、ジェネレータ、メンバー変数、一般的なメソッドなどを含むことができる.
  • は、汎用機能およびガイドラインを定義し、他のクラスに継承する.
  • public abstract class Hello{
    	// 멤버변수
        // 생성자
        // 일반 메서드
        // 추상 메서드
        ...
    }

    抽象クラスの継承

  • の一般クラスの継承と同様に、「extends」キーを使用します.
  • 📝 抽象メソッド(抽象メソッド)

  • 抽象クラスでのみ宣言できます.
  • メソッドの宣言部のみで、実施部の「未完成メソッド」はありません.
  • 抽象メソッドは、サブクラスが実施しなければならないメソッドのガイドラインにのみ適用される.
    ヒントの目的に使用します.
  • 抽象メソッド宣言

  • 「abstract」キーワード定義メソッドを使用します.
  • のみが宣言し、実施部に使用されるブロックは存在しない.
    句読点(;)書きます.
  • 抽象クラスを継承する場合、子クラスは親クラスのすべての抽象メソッドを再定義する必要があります.
  • public abstract void sayHello();
    コードの例
    // 육군 / 해군 / 공군 의 공통 기능을 명시하기 위한 부모 클래스
    
    public abstract class Unit {
    	private String name;
    
    	public Unit(String name) {
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	// 자식들이 재정의할 메서드를 추상으로 명시
    	public abstract void attack();
    	
    	public abstract void move();
    	
    }
    // 자식 클래스 
    
    // 육군
    public class Army extends Unit {
    	
    	public Army(String name) {
    		super(name);
    	}
    	
        // 추상 메서드의 재정의를 요구한다.
    	@Override
    	public void attack() {
    		System.out.println(this.getName() + ">> 육상공격");
    	}
    
    	@Override
    	public void move() {
    		System.out.println(this.getName() + ">> 육상이동");
    	}
    
    }
    
    // 해군
    public class Navy extends Unit {
    
    	public Navy(String name) {
    		super(name);
    	}
    
    	@Override
    	public void attack() {
    		System.out.println(this.getName() + ">> 해안공격");
    	}
    
    	@Override
    	public void move() {
    		System.out.println(this.getName() + ">> 해안이동");
    	}
    	
    }
    
    // 공군
    public class AirForce extends Unit {
    
    	public AirForce(String name) {
    		super(name);
    	}
    
    	@Override
    	public void attack() {
    		System.out.println(this.getName() + ">> 공중공격");
    	}
    
    	@Override
    	public void move() {
    		System.out.println(this.getName() + ">> 공중이동");
    	}
    
    }
    // Main 클래스
    
    public class Main {
    
    	public static void main(String[] args) {
    		Unit[] u = new Unit[3];
    		
    		u[0] = new Army("육군");
    		u[1] = new Navy("해군");
    		u[2] = new AirForce("공군");
    		
    		for (int i = 0; i < u.length; i++) {
    			u[i].attack();
    			u[i].move();
    			System.out.println("------------------------------------------");
    		}
    		
    	}
    
    }
    👉 実行結果
    육군>> 육상공격
    육군>> 육상이동
    ------------------------------------------
    해군>> 해안공격
    해군>> 해안이동
    ------------------------------------------
    공군>> 공중공격
    공군>> 공중이동
    ------------------------------------------