과거⚰️

추상화 || 클래스 형변화 || 인터페이스

아무루 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) {
		
		
	}
}