TIL(2022.02.18)


抽象クラス
  • 抽象(追加不可)
  • 抽象クラスは、抽象メソッドおよび従来のメソッドを使用して
  • を記述することができる.
  • 抽象メソッドは、サブクラスで実装されなければならない.
  • package ch05;
    
    
    //추상클래스는 추상메서드 와 일반메서드 모두 작성할 수 있고 추상메서드가 잇으면 자식클래스에서 추상메서드는 무조건 구현해야한다.
    abstract class Animal{
    	abstract void speak(); //추상메서드 (몸체가 없다)
    	
    	void Hello() {
    		System.out.println("!!!");
    	}
    }
    
    class Dog extends Animal{
    	// 오버라이드 (Animal의 speak가 무효화)
    	void speak() {
    		System.out.println("멍멍");
    	}
    }
    
    class Cat extends Animal{
    	void speak() {}
    }
    
    class Bird extends Animal{
    
    	//추상메서드를 부모가 가지고 있으면 자식은 추상메서드를 반드시 구현해야한다.
    	@Override
    	void speak() {
    		System.out.println("짹짹");
    	}
    	
    }
    
    public class OOPEx07 {
    	public static void main(String[] args) {
    		Animal a1 = new Dog();
    		Animal a2 = new Cat();
    		a1.speak(); // 동적바인딩 된다. 왜? 부모의 메서드가 무효화 되니까
    		Animal a3 = new Bird();
    		a3.speak();
    		
    	}
    }
    
    抽象クラス未完了フォーミュラ
    package ch05;
    
    abstract class 육식동물{
    	void 걷기(){
    		System.out.println("걷다");
    	}
    	
    	//공격하는 방법은 다르기 때문에 미완성하게 작성
    	abstract void 공격();
    }
    
    classextends 육식동물{
    
    	@Override
    	void 공격() {
    		System.out.println("독으로 공격");
    	}
    	
    }
    
    class 사자 extends 육식동물{
    
    	@Override
    	void 공격() {
    		System.out.println("이빨로 공격");
    	}
    	
    }
    
    public class OOPEx08 {
    	public static void main(String[] args) {
    		육식동물 u1 = new();
    		육식동물 u2 = new 사자();
    		
    		u1.공격();
    		u1.걷기();
    		u2.공격();
    		u2.걷기();
    	}
    }
    
    インタフェース
  • ワイドビューインタフェース
    1.一方的な約束2.甲乙双方の存在する承諾
  • javaのインタフェース
    動作制約
  • インタフェースと抽象クラスの違い
    インタフェース:動作コンストレイント
    抽象クラス:未完成の設計図
    package ch05;
    
    interface MoveAble{ //행위의 제약
    	// 앞에 public abstract가 생략
    	
    	void();
    	
    	void 아래();
    	
    	void 왼쪽();
    	
    	void 오른쪽();
    }
    
    interface MoveAble2{ //행위의 제약
    	// 앞에 public abstract가 생략
    	
    	void();
    	
    	void 아래();
    	
    	void 왼쪽();
    	
    	void 오른쪽();
    	
    	void 숨기();
    	
    	
    }
    
    // 인터페이스 구현이 자식 클래스로 위임될 수 있어서 강제 안됨
    abstract class 사나운동물 implements MoveAble{
    	abstract void 공격(); // 미완성된 함수
    	
    	@Override
    	public void() {
    		System.out.println("위로 이동");
    	}
    	@Override
    	public void 아래() {
    		System.out.println("아래로 이동");
    	}
    	@Override
    	public void 왼쪽() {
    		System.out.println("왼쪽으로 이동");
    	}
    	@Override
    	public void 오른쪽() {
    		System.out.println("오른쪽로 이동");
    	}
    }
    // 인터페이스 구현이 자식 클래스로 위임될 수 있어서 강제 안됨
    abstract class 온순한동물 implements MoveAble2{
    
    	abstract void 채집(); // 미완성된 메서드
    
    	@Override
    	public void() {
    		System.out.println("위");
    		
    	}
    
    	@Override
    	public void 아래() {
    		System.out.println("아래");		
    	}
    
    	@Override
    	public void 왼쪽() {
    		System.out.println("왼쪽");		
    	}
    
    	@Override
    	public void 오른쪽() {
    		System.out.println("오른쪽");		
    	}
    
    	@Override
    	public void 숨기() {
    		System.out.println("숨기");		
    	}
    	
    	
    }
    
    class 원숭이 extends 온순한동물 implements MoveAble{
    
    	@Override//어노테이션  = JVM이 실행시에 분석해서 확인 = JVM의 힌트 = JVM이 실행 시 처리
    	void 채집() {
    		System.out.println("바나나 채집");
    	}
    	
    }
    
    classextends 온순한동물 implements MoveAble{
    
    	@Override
    	void 채집() {
    		System.out.println("풀 채집");
    		
    	}
    	
    }
    
    class 호랑이 extends 사나운동물 implements MoveAble{
    
    	@Override
    	void 공격() {
    		System.out.println("이빨로 공격");
    		
    	}
    	
    }
    
    class 코뿔소 extends 사나운동물 implements MoveAble{
    
    	@Override
    	void 공격() {
    		System.out.println("뿔로 공격");
    	}
    	
    }
    
    
    public class OOPEx09 {
    	static void 조이스틱(온순한동물 u1) {
    		u1.숨기();
    		u1.();
    		u1.아래();
    		u1.오른쪽();
    		u1.왼쪽();
    	}
    	
    	static void 조이스틱(사나운동물 u1) {
    		u1.();
    		u1.아래();
    		u1.오른쪽();
    		u1.왼쪽();
    	}
    	
    	 public static void main(String[] args) {
    		소 u1 = new();
    		조이스틱(u1);
    		
    		원숭이 u2 = new 원숭이();
    		조이스틱(u2);
    		
    		호랑이 u3 = new 호랑이();
    		조이스틱(u3);
    		
    		코뿔소 u4 = new 코뿔소();
    		조이스틱(u4);
    	}
    }