JAVA Programming/JAVA 개념 정리

JAVA interface 인터페이스 abstract class 추상 클래스

psy_er 2021. 12. 2. 01:02
728x90

JAVA interface 인터페이스 abstract class 추상 클래스

 

추상 클래스 : 객체 생성 불가능, 참조 변수 선언은 가능

 

공통점이 있는 객체들에게 어떤 메서드를 강제 구현시키도록 한다.

상속 시 super 클래스로 존재하고, 추상 메서드를 하나 이상 포함시켜야 한다. 

그리고 자식 클래스가 인터페이스 구현을 강제하고 몸체를 구현한다.

 

추상 클래스 정의와 추상 메서드 정의 모두 abstract 키워드로 한다.

추상 메서드를 재정의하면서 오버 라이딩해 클래스마다 구현을 다르게 한다.

 

하위 클래스 사이에 공통으로 필요한 메서드를 추상 클래스에 추가한다.

 

같은 이름, 같은 동작 : 일반 메서드에 구현

같은 이름, 다른 동작 : 추상 메서드에 구현

 

 

인터페이스 : 다중 상속이 불가능한 JAVA에서 필요한 추상 메서드들의 묶음, 모두 재정의해야 한다.

 

공통점이 없는 객체들에게도 어떤 메서드를 강제 재정의 시킨다 >> 어댑터 이용해 필요한 메서드만

인터페이스는 일반 멤버 변수나 메서드를 가지지 못한다.

추상 메서드처럼 참조 변수 선언은 가능하지만, 객체 생성은 불가능하다.

 

클래스 정의 시 implements로 인터페이스 구현을 명시한다.

인터페이스 안의 함수는 모두 추상 메서드이다. 인터페이스는 다중 상속 가능하다.

 

추상 클래스의 자식은 extends로 정의하며 상속하고

인터페이스의 구현은 implements로 한다.

 

 

<배열 활용>

public class Test_Array{
	
    public static void main(String[] args){
    
    	Person[] pList = new Person[2];
        pList[0] = new Person("일지매", 18);
        pList[1] = new Person("홍길동", 20 , "컴퓨터공학");
        
        for (Person p : pList){
        	System.out.print("이름 : ");
            p.WhatYourName();
            
            if(p instanceof UnivStudent){
            	((UnivStudent) p).WhoAreYou();
            }
            System.out.println();
        }
	}
}

 

<업 캐스팅 다운 캐스팅 활용>

public class Test_UpCasting{
	public static void main(String[] args){
    
    	Person p = new UnivStudent("홍길동", 20, "컴퓨터공학"); // 업캐스팅
        p.WhatYourName();
        
        UnivStudent s = (UnivStudent) p; // 추가된 멤버 접근 위한 다운캐스팅
        s.WhoAreYou();
        
        try{
        	UnivStudent s_rerr = (UnivStudent)new Person("일지매", 18); // 다운 캐스팅
            s_rerr.WhoAreYou();
        }
        catch(ClassCastException e){ // 캐스팅 오류
        	e.printStackTrace();
        }
    }
}

 

<인터페이스>

interface Animal{
	void sound();
}

class Dog implements Animal{
	@Override
    public void sound(){
    	System.out.println("woof woof");
    }
}

class Cat implements Animal{
	@Override
    public void sound(){
    	System.out.println("meow meow");
    }
}

public class Interface{
	public static void main(String[] args){
    	Animal[] animal = new Animal[2]; // 인터페이스로 참조변수 생성은 가능
        animal[0] = new Dog(); // 안에 객체
        animal[1] = new Cat(); // 안에 객체
        
        for(Animal a : animal)
        	a.sound();
    }
}
728x90