728x90
반응형
SMALL

상속 개념

상속이란? 부모가 자식에게 물려주는 행위를 말한다.

객체 지향 프로그램에서는 부모 클래스의 필드 및 메소드를 자식 클래스에게 물려줄 수 있다.

public class A{
	int field;
    void method1(){...}
}

public class B extends A{
	String field;
    void method2(){...}
}
B b = new B();
b.field1=10;//상속받은 필드
b.field2=20;
b.method1();//상속받은 메소드
b.method2();

 

클래스 상속

자식은 물려받을 부모를 선택한다. 부모는 1개만 가능!

public class 자식클래스 extends 부모클래스{

}

 

 

부모 생성자 호출

자식 클래스 변수 = new 자식클래스();
//자식 생성자 선언
public 자식클래스(...){
	super();
    ...
}

//자식 생성자 선언2
public 자식클래스(...){
	super(매개값, ...);
}

 

메소드 재정의

메소드 오버라이딩? 부모 클래스의 모든 메소드가 자식 클래스에 맞게 설계된 것이 아니기 때문에 재정의해서 사용한다.

 

메소드 오버라이딩의 규칙

- 부모 메소드의 선언부(리터 타입, 메소드 이름, 매개변수)와 동일해야한다.

- 접근 제한을 더 강하게 오버라이딩할 수 없다.(public->private)으로 변경 불가

- 새로운 예외를 throws 할 수 없다.

class Parent{
	void method1(){
    	System.out.println("Parent");
    }
    
    void method2(){
    	System.out.println("Parent");
    }
}

class Child extends Parent{
	void method2(){
    	System.out.prinln("Child");
    }
}

class ChildExample{
	public static void main(Strings[] args){
    	Child c = new Child();
        
        c.method1();//Parent의 메소드1
        c.method2();//Child의 메소드2
    }

}

 

부모 메소드 호출

메소드 재정의 시 부모 메소드의 일부만 변경된다 하더라고 자식 메소드도 중복된 내용을 갖고 있어야 한다.

중복된 부분은 super()키워드와 도트(.)연산자를 이용한다.

class Parent{
	public void method(){
    ...
    }
}

class Child extends Parent{
	@Override
    public void method(){
    	super().method();
        ...
    }
}

 

 

 

final 클래스와 final 메소드

final 클래스

클래스를 선언할 때 final 키워드를 class 앞에 붙이면 최종적인 클래스이므로 더이상 상속할 수 없다.

즉, final클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다.

public final class 클래스{...}


//대표적인 예
public final class String {...}

 

protected 접근 제한자

접근 제한자 제한 대상 제한 범위
protected 필드, 생성자, 메소드 같은 패키지이거나, 자식 객체만 사용 가능

 

타입 변환

자동 타입 변환

부모타입 변수 = 자식타입객체;
Cat cat = new Cat();
Animal animal = cat;

 

강제 타입 변환

자식타입 변수 = (자식타입) 부모타입객체;
Parent parent = new Child();
Child child = (Childe)parent;

 

다형성

다형성이란? 사용방법은 동일하지만 실행 결과가 다양하게 나오는 성질을 말한다.

상속으로 인해 부모의 메소드를 오버라이딩을 하면서 다양하게 수정해서 사용할 수 있다.

 

필드 다형성

필드 타입은 동일하지만, 대입되는 객체가 달라져서 실행결과가 다양하게 나옴.

public class Car{
	public Tire tire;
    
    public void run(){
    	this.roll();
        //tire필드에 대입된 객체의 roll()메소드를 실행. 
        //만약 Tire을 상속받은 hankook, kumho가 roll()메소드를 재정의하고 있다면, 그 roll()이 호출됨.
    }
}

 

매개변수 다형성

메소드가 매개변수로 클래스 타입을 갖고 있을 때도 다형성이 발생한다.

public class Driver{
	public void drive(Vehicle vehicle){
    	vehicle.run();
        //매개값으로 받은 vehicle의 run()을 실행할텐데
        //매개변수로 받은 객체가 Vehicle을 상속받아 run()을 재정의하고 있다면,
        //그 run()을 실행한다.
    }
}

 

객체 타입 확인

boolean result = 객체 instanceof 타입;
public void method(Parent parent){
	if(parent instanceof Child){
    	Child child =(Child)parent;
    }
}

 

 

추상 클래스

추상 클래스란?

객체를 생성할 수 있는 실체 클래스의 공통적인 필드나 메소드를 추출해서 선언한 클래스

Animal animal = new Animal(); //X

추상 클래스는 객체를 직접 생성할 수 없다.

 

추상 클래스 선언

pubic abstract class 클래스명{
//필드
//생성자
//메소드
}

 

추상 메소드와 재정의

abstract 리턴타입 메소드명(매개변수,...);
public abstract class Animal{
	abstract void sound();
}

 

봉인된 클래스

JAVA15 부터 무분별한 자식 클래스 생성을 방지하기 위해 봉인된(sealed) 클래스가 도입되었다.

public sealed class Person permits Employee, Manager {...}

Person의 자식 클래스는 Employee와 Manager만 가능하다.

728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

[JAVA] #9 중첩 선언과 익명 객체  (0) 2023.04.17
[JAVA] #8 인터페이스  (0) 2023.04.14
[JAVA] #6 클래스(Class)-2  (0) 2023.04.10
[JAVA] #6 클래스(Class)-1  (0) 2023.04.10
[JAVA] #2 변수와 타입  (0) 2023.04.06

+ Recent posts