ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 추상화 || 클래스 형변화 || 인터페이스
    과거⚰️ 2020. 12. 27. 18:57
    package day068;
    
    // # 상속
    class A {
    	int a;
    	
    	void test() {}
    }
    
    class B extends A {
    	int b;
    }
    
    /*
     * # 추상화(abstract)
     * 1. 부모 클래스를 상속받은 자식 클래스에서
     *    부모 클래스의 특정 메서드를 만들도록 강제하는 것
     * 2. abstract의 위치
     * 	  1) 강제할 메서드 앞에 그리고 
     * 	  2) 클래스 앞에 붙여준다.
     */
    
    // 1) 클래스 앞에 abstract를 붙여줌
    abstract class C {
    	int c;
    	// 2) 메서드 앞에 abstract를 붙여줌
    	abstract void test();
    }
    
    // 3) 클래스 C를 상속받자마자 오류가 발생함
    class D extends C{
    	int d;
    	// 4) 강제로 만들어야하는 메서드
    	void test() {
    		
    	}
    }
    
    public class Day06701추상화 {
    	public static void main(String[] args) {
    		
    		// 추상 클래스는 메모리 생성을 할 수 없다.
    		// C c = new C();
    		
    	}
     }
     
     package day068;
    
    class Parent {
    	int x;
    }
    
    class Child extends Parent {
    	int y;
    }
    
    public class Day06702클래스형변환 {
    	public static void main(String[] args) {
    		
    		Parent p = new Parent();
    		p.x = 10;
    		
    		Child c = new Child();
    		c.x = 5;
    		c.y = 6;
    		
    		Parent p1 = (Parent)c;
    		System.out.println(p1.x);			// 5
    		
    		// java.lang.ClassCastException
    		// Child c1 = (Child)p;
    		
    		Child c2 = (Child)p1;
    		System.out.println(c2.y);			// 6
    		
    	}
    }
    
    
    package day068;
    
    // 추상 클래스 안에 메서드를 작성할 때
    // abstract를 붙인 메서드(추상 메서드)와 
    // 안붙인 메서드(일반 메서드) 모두 만들 수 있다.
    abstract class AA {
    	abstract void test1();			// 추상 메서드
    	void test2() {}					// 일반 메서드
    }
    
    // 자식 클래스에서는 abstract가 붙어있는 메서드를
    // 강제로 구현해야한다.
    class BB extends AA {
    	void test1() {}
    }
    
    interface EE {
    	/*public abstract */void test3();
    	/*public static final */int NUM = 10;
    }
    
    interface CC {
    	void test1();
    	void test2();
    }
    
    // interface를 구현하면(implements) 메서드를 무조건 강제 구현해야한다.
    class DD implements EE, CC {
    
    	@Override
    	public void test1() {
    		// TODO Auto-generated method stub
    	}
    
    	@Override
    	public void test2() {
    		// TODO Auto-generated method stub
    	}
    
    	@Override
    	public void test3() {
    		// TODO Auto-generated method stub
    	}
    	
    }
    
    /*
     * # 인터페이스(interface) 
     * 1. 인터페이스는 추상 클래스보다 더 추상화된 클래스이다.(강제성)
     * 2. 실제 구현된 것이 전혀 없는 기본 설계도이다.
     * 3. 상수와 추상 메서드만 멤버로 갖는다.
     * 4. 인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용되는 클래스이다.
     * 5. 다중 상속이 가능하다.
     */
    
    public class Day06703인터페이스1 {
    	public static void main(String[] args) {
    		
    		
    	}
    }

    '과거⚰️' 카테고리의 다른 글

    미니프로젝트 ATM  (0) 2020.12.29
    다형성 || 좀비  (0) 2020.12.28
    실습예제  (0) 2020.12.26
    상속 오버라이드 super 접근제어자  (0) 2020.12.25
    css  (0) 2020.12.24
Designed by Tistory.