추상 클래스와 인터페이스
abstract & Interface
package abs;
// abstract 추상화
public abstract class Abstract {
public abstract void disp() ; // 추상 메소드
public void output() {
System.out.println("추상클래스안에 있는 메소드");
}
}
/*
* 추상클래스
* : 아직 구체화가 덜된 클래스
* : 추상메소드가 하나이상 존재하는 클래스. (여러개 가능)
* : 객체를 생성할 수 없는 클래스. 예외 : 익명내부클래스
*
* : 오직 상속을 목적으로 제공.
* : 상속받은 sub class도 객체를 생성할 수 없다.
* - sub class 객체생성을 하고자 할 경우 추상메소드(구체화가 안된부분)를
* 꼭 오버라이딩을 해서 사용하면 객체를 생성할 수 있다.(추상화)
*
* 추상메소드
* : 이름만 정의되어있는 메소드
* : abstract 키워드를 꼭 붙여서 사용
*
* 추상클래스도 abstract 꼭 붙여서 만들어야한다.
*
* 인터페이스
* : 다중상속을 대체. (1차목표)
* : 상수, 추상메소드로만 구성.
* : 추상클래스보다 더 추상화된 모델.
* : 식당 메뉴판과 같다.
* : 인터페이스를 받은 클래스에서 구현.(추상메소드를 오버라이딩) - 강제성 발생
* : 갯수제한없이 클래스에 줄 수 있다.
*
* : 인터페이스끼리는 상속이 가능한데 다중상속도 가능하다. (모호성이 발생하지 않는다.)
* : implements 여러개 가능.
* : 인터페이스는 동적바인딩 가능.
*
*/
package abs;
public class AbsTest extends Abstract{ // 추상클래스 메소드를 끌어온거니 추상클래스화가 된거임.
public static void main(String[] args) {
// Abstract abs; // 레퍼런스 선언
// Abstract abs = new Abstract();
AbsTest abs = new AbsTest();
abs.disp();
abs.output();
}
@Override // 오버라이딩
public void disp() {
System.out.println("오버라이딩 메소드");
}
}
/*
* 추상클래스는 객체성성을 할수없다.
* 상속을 목적으로 사용되어지는 클래스
* 강제성을 가지고 있음.
*
* Is a 관계 서브클래스로 내려올수록 구체화되는 단계
* 공통 :
* 1. 슈퍼클래스는 서브클래스의 공통된 것을 담고 있어야 함.(강제성)
* 2.
*/
----------- 동적바인과 추상클래스
package day7abs;
public abstract class Area { // 추상클래스
public abstract void draw(); // 정의만 해놓음
}
package day7abs;
public class Circle extends Area {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Circle drwa..");
}
}
package day7abs;
public class Rect extends Area{
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Rect drwa..");
}
}
package day7abs;
public class Tri extends Area{
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("Tri drwa..");
}
public void Tri() {
System.out.println("tri");
}
}
package day7abs;
public class MainTest {
public static void main(String[] args) {
Tri tri = new Tri(); // 정적바인딩.
Rect rect = new Rect();
Circle cir = new Circle();
// tri.draw();
// rect.draw();
// cir.draw();
Area area;
area = tri; // 동적바인딩
area.draw();
// area.Tri(); // 인식을 할 수 없다.
area = rect;
area.draw();
area = cir;
area.draw();
// Area a = new Tri();
}
}
/*
* 동적바인딩.
* : 부모의 레퍼런스로 자식객체를 접근하는 방식.
* : 자식만 알고있는것들은 동적바인딩 접근이 안됨.
* : 부모가 원래 알고있는것만 접근가능
*/
인터페이스
package interFace;
public interface A extends B,C{ // 인터페이스는 자동으로 됨 ㅋ
// 상수 + 추상메소드
final static int a = 10; // 선언과 동시에 꼭 초기화를 해야함. static : 오직 한개
abstract void disp();
}
/*
* final (키워드가 붙으면 상수)
* 1. field => 자동으로 상수화
* 2. method => 오버라이딩 금지(자식한테 너 무조건 내꺼써)
* 3. Object => 상속금지(is ~ a 금지) has ~ a 로만 => String class
*/
package interFace;
public interface B {
void dispB();
}
package interFace;
public interface C {
void dispC();
}
package interFace;
public class InterTest implements A{
public static void main(String[] args) {
// InterTest it = new InterTest();
// it.disp();
// it.dispB();
// it.dispC();
A a = new InterTest(); // 동적바인딩
a.disp();
a.dispB();
a.dispC();
}
@Override
public void dispB() {
// TODO Auto-generated method stub
System.out.println("dispB");
}
@Override
public void dispC() {
// TODO Auto-generated method stub
System.out.println("dispC");
}
@Override
public void disp() {
// TODO Auto-generated method stub
System.out.println("dispA");
}
}
반응형
'자바과정 > Java' 카테고리의 다른 글
Java 기초 - 8일차 (0) | 2021.02.17 |
---|---|
Java 실습(스택&큐) - 7일차 (0) | 2021.02.15 |
Java 실습(상속클래스) - 6일차 (0) | 2021.02.04 |
Java 실습(한사람 성적처리:과목수 입력) - 5일차 (0) | 2021.02.04 |
Java 실습(성적처리프로그램:클래스) - 5일차 (0) | 2021.02.03 |
댓글