티스토리 뷰

[주제]

- 추상 클래스와 인터페이스



[중요]

1. 추상 클래스

- class 앞에 'abstract'를 붙임

- 추상 메소드를 하나 이상 포함하고 있는 클래스

- 반드시 상속이 필요함


2. 추상 메소드

- 내용은 없고 사용할 예정이라고 선언만 한 상태

- 사용하기 위해선 내부 또는 외부 클래스에서 내용에 대한 정의 필요

- 메소드가 선언만 되어있거나 정의까지 되어있는 것이 섞여져 있음


3. 인터페이스

- 클래스는 'implements'를 붙여서 인터페이스를 상속 받을 수 있음

- 메소드가 선언만 되어있음

- 반드시 상속이 필요함


★ 각 차이점

- 클래스: 메소드 선언, 정의가 전부 되어있음

- 추상 클래스: 추상 메소드와 일반 메소드(정의된)

- 인터페이스: 메소드가 선언만 되어있음  

  ※ c언어 header 파일과 흡사



[소스]

■ abMyClass.java

package interfaceClass;
 
public abstract class abMyClass {        // 추상 클래스
/*
 * [추상]
 * abstract: 추상
 * abstract class
 * 
 * [추상 클래스]
 * 추상 메소드를 하나 이상 포함하고 있는 클래스
 * 반드시 상속이 필요함
 * 
 * [추상 메소드]
 * 내용은 없고 사용할 예정이라고 선언만 한 상태
 * - 사용하기 위해선 내부 또는 외부 클래스에서 내용에 대한 정의 필요
 * 
 * [중요]
 * 메소드가 선언만 되어있거나 정의까지 되어있는 것이 섞여져 있음
 */
    abstract public void disName();        // 추상 메소드
    
    public void dispCompany() {
        System.out.println("abMyClass dispComany()");
    }
}
cs



■ youClass.java

package interfaceClass;
 
public class youClass extends abMyClass{
    public void disName() {
        System.out.println("abMyClass disName()");
    }
}
cs



■ myInterface.java

package interfaceClass;
 
public interface myInterface {
/*
 * [인터페이스]
 * interface: 메소드가 선언만 되어있음
 * 반드시 상속이 필요함
 * 
 * [클래스와의 차이점]
 * 클래스: 메소드 선언, 정의가 전부 되어있음
 * 추상 클래스: 추상 메소드와 일반 메소드(정의된)
 * 
 * [중요]
 * 메소드가 선언만 되어있음  ※ c언어 header 파일과 흡사
 */
    public void disName();
    public void dispCompany();
}
cs



■ MyClass.java

package interfaceClass;
 
public class MyClass implements myInterface{
    public void disName() {
        System.out.println("MyClass disName()");
    }
    
    public void dispCompany() {
        System.out.println("MyClass dispComany()");
    }
}
cs




■ mainClass.java

package interfaceClass;
 
public class mainClass {
    public static void main(String[] args) {
        youClass ycls = new youClass();
        
        ycls.disName();
        ycls.dispCompany();
        
        // 메인에서 'disName' 메소드를 정의
        abMyClass mcls = new abMyClass() {    
            @Override
            public void disName() {
                System.out.println("abMyClass disName()");
            }
        };
        
        mcls.disName();
        mcls.dispCompany();
        
        MyClass cls = new MyClass();
        
        cls.disName();
        cls.dispCompany();
    }
}
cs



■ 실행결과



[첨부 파일]

abMyClass.java


mainClass.java


MyClass.java


myInterface.java


youClass.java


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함