public class Ex66_abstract {
public static void main(String[] args) {
//Ex66_abstract.java
1. 클래스
2. 인터페이스
3. 추상 클래스 <- 클래스와 인터페이스의 중간 성질
//구현부도 가지면서 자식에게 강요하는 추상메소드도 가짐
//추상 클래스는 2개의 성질을 다 갖고있기때문에 사용하기 복잡하고 어려운 경우가 많음 -> 많이 안쓰임
K810 k = new K810();
}//main
}//main class
/*
interface Keyboard{
인터페이스는 구현된(실제 존재하는) 멤버를 가질 수 없다.
public int price; 멤버변수를 가질 수 없다
public int weight;
행동의 제약밖에 못함
//추상 메소드를 상속 시킨 후 구현부 완성을 강요
void typing(String txt); => 구현부가 없기 때문에 추상적
}
*/
추상 클래스 -> 자식들에게 멤버변수도 상속시킬 수 있으면서, 행동의 제약도 걸 수 있다
- 구현 멤버를 가질 수 있다.(= 일반 클래스의 성질)
- 추상 멤버를 가질 수 있다.(= 인터페이스의 성질)
abstract class Keyboard { //class 앞에 abstract만 붙이면 추상 클래스가 됨
public int price;
public int weight;
public void test() {
System.out.println("test");
}
// void typing(String txt); //인터페이스 내에서만 작성하는 추상 메소드 표기법
//추상 메소드
public abstract void typing(String txt); //추상클래스 내에서만 작성하는 추상 메소드 표기법 사용 가능
}
//키보드
class K810 extends Keyboard{ //인터페이스 상속 받을 때 '인터페이스를 구현한다' 라는 표현을 주로 씀
public String color;
// public int price; 공통변수라 부모 클래스에 포함 후 삭제
// public int weight;
일반 클래스의 멤버 메소드는 구현부를 반드시 가져야 한다. > 추상 메소드는 가질 수 없다.
// void typing(String txt);
public void typing(String txt) { //기본적으로 키보드로 하는 것
//인터페이스를 지우고 부모클래스를 상속받았기 때문에 강제성 사라짐
}
}
//키보드
class K380 extends Keyboard{
// public int price;
// public int weight;
public int size;
// public void keydown(String txt) { //기본적으로 키보드로 하는 것
public void typing(String txt) { //같은 기능이면 메소드명을 동일하게
}
}
즉,
일반클래스 : 멤버변수(구현), 메소드를 상속시킬 수 있음.
인터페이스 : 멤버변수 없음. 메소드를 어떠한 틀로 쓰라는 형식의 제약만을 줌. 몸통부는 안주니 자식이 채워야 함
추상클래스 : 일반클래스 + 인터페이스(하이브리드 성격)
멤버변수도 줄 수 있으면서 메소드를 어떠한 틀로 쓰라는 형식의 제약도 줄 수 있음
But, 추상클래스는 어려우니까 많이 쓰이지는 않는다 함!
'[JAVA] 정리 > 클래스(Class)_타입(Type)' 카테고리의 다른 글
| 클래스_오브젝트(Object) (0) | 2023.02.23 |
|---|---|
| 향상된 for문 for(자료형 변수명 : 배열명) (0) | 2023.02.23 |
| 제네릭 클래스(Generic) (0) | 2023.02.23 |
| 클래스_enum (0) | 2023.02.22 |
| 클래스_상속 자격(extends, implements) (0) | 2023.02.22 |