과거⚰️
추상화 || 클래스 형변화 || 인터페이스
아무루
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) {
}
}