📘자바

상속

상속 = 기존 클래스를 확장하는 것 상속의 장점 = 코드 중복을 줄이고 프로그램 확장성을 증가시킨다 class A extends B {} = A 클래스는 B를 상속 (또는 확장)

이러한 상속 관계에서, 근간이 되는 클래스를 부모클래스(A)라 부르고, 부모 클래스를 통해 확장된 클래스를 자식클래스(B)라 한다.

업 캐스팅

업 캐스팅이란, 자식 객체를 부모의 타입으로 해석하는 것

class Animal{}
class Cat extends Animal{}
class Dog extends Animal{}
class Rabbit extends Animal{}
//이러한 상속관계가 있을경우
Cat c = new Cat(); // 고양이 객체 생성
Animal a = c; // 고양이 객체를 동물로 해석이 가능
// 하지만 역은 성립하지 않음
Animal aaa = new Animal();
Cat ccc = aaa; // 동물 객체를 고양이로 해석이 불가능

//이러한 업 캐스팅은, 다양한 객체들을 부모의 타입으로 관리할 수 있게 한다.(그룹화가 가능)
Animal c = new Cat();
Animal d = new Dog();
Animal r = new Rabbit();
Animal [] animals = {c,d,r};

메소드 오버라이딩

메소드 오버라이딩이란, 부모의 메소드를 자식 클래스에서 재정의하는것이다.

동물이라는 부모클래스의 잠자기는 sleep이라 했을때 자식클래스인 고양이의 잠자기는 many sleep으로 하고싶다. 이럴때 쓰는 개념이 메소드 오버라이딩이다.

class Animal{
	public void sleep(){
    	System.out.println("sleep");
    }
}
class Cat extends Animal{
	public void sleep(){
    	System.out.println("many sleep");
    }
}
//이렇게 메소드 오버라이딩을 쓴 결과는?
Animal A = new Animal();
A.sleep(); // "sleep"

Cat C = new Cat();
C.sleep(); // "many sleep"

super

자식 객체를 생성과 동시에 초기화하려먼, 먼저 부모의 생성자가 호출되어야한다, 이때 쓰는것이 super이다.

 //생성자 호출 영역
Zed z = new Zed("Zed",100,0);
//생성자 정의 영역
class Lol{
	protected String name;
    protected int hp;
    
    public Lol(String name, int hp){
    	this.name = name;
        this.hp = hp;
    }
    public String toString(){
    	return String.format("%s,%d",this.name,this.hp);
    }
}

class Zed extends Lol{
	protected int mp
    
    public Zed(String name, int hp, int mp){
    	super(name,hp); // 부모 클래스 생성자 호출
        this.mp = mp;
    }
    	
    public String toString(){ // 메소드 오버라이딩
    return String.format("%s,%d,%d",super.name,super.hp,this.mp); 
    							    //super을this로 써도 됨
    }
}

인터페이스

인터페이스 = 메소드 묶음의 역할 정의 방법 프로토타입(추상) 메소드 = 내용이 없는 껍데기 메소드 implements 키워드란? = 클래스에게 역할을 부여하는 것 인터페이스의 장점 = 인터페이스를 통한 업캐스팅 가능 , 프로그램 설계의 명확성 증가

//인터페이스 선언
interface Alarm{
	public void beep(); //프로토타입 메소드 (추상 메소드)
    public void playMusic(); // 프로토타입 메소드
}
class SmartPhone implements Alarm{
	public void beep(){
    	System.out.println("삐삐삐");
    }
    public void playMusic(){
    System.out.println("나나나");
    }
}

인터페이스를 통한 업캐스팅 가능

class SmartPhone implements Alarm, phone, Messanger{
	//내부생략
}
//스마트폰 객체 생성
SmartPhone sp = new SmartPhone();
//스마트폰을 다양하게 해석(업캐스팅 - 상위 타입으로 해석)
Alarm a = sp; // 스마트폰은 알람이다 (O)
Phone p = sp; // 스마트폰은 전화기이다(O)
Messanger m = sp; // 스마트폰은 메신저이다(O)

이렇게 하나의 객체가 다양한 타입으로 해석되는 것을 다형성 이라고한다

태그:

카테고리:

업데이트: