Written by coh at home

[JAVA]상속과 다형성 본문

languages/java

[JAVA]상속과 다형성

och 2023. 10. 30. 12:12

1. 상속

상속은 주로 기존 클래스의 정보에서 내가 필요로 하는 메소드나 변수가 필요할 때 사용된다. 

->기존 클래스의 필드와 메소드들 + 내가 필요해서 만든 필드와 메소드.

 

1-1. 상속시킬 때 알아야 하는 것들. 

->상속 시킬 때는 class 이름 옆에 extend하고 상속시킬 클래스를 적는다.

 

->상속 시 생성자는 항상 부모클래스 먼저 생성한다. keyword는 super()이다.

단, 부모클래스의 생성자가 존재하지 않는다면 하지 않아도 된다.

부모 클래스의 메소드를 사용하고 싶을 때에도 super. 하고 사용한다. 

 

->상속 클래스에서 접근제어자에 따라 필드에 접근을 못할 수도 있다. 단, 데이터를 사용못한다는 거지 물려받지 않는다는 것이 아니다.  

부모클래스의 protected 필드는 자식클래스에서 접근 가능하지만

부모클래스의 private 필드는 자식클래스에서 접근 불가능하다. 

이런 때에는 부모 클래스의 메소드를 직접 사용하여(super.methodName) 접근, 이용하여야 한다. 

 

->메소드 오버라이딩은 오버로딩과 착각하면 안된다. 

같은 이름의 메소드를 재정의한다는 뜻. 변수의 갯수를 통해 컴파일러가 알아서 함수를 골라주는 오버로딩과는 다른 말이다. 연산자 또한 오버라이딩이 가능하다. String 객체의 + 연산은 연산자의 메소드가 오버라이딩이 된 것.

@override

오버라이드 어노테이션을 사용하면 상속 받은 클래스에 해당 메소드가 없을 경우 에러를 발생시켜주어서 에러없이 코딩하기에 좋다. 없다고 해서 문제되진 않는다. 

 

2. 다형성

분류학이랑 비슷한 느낌이다. 

부모, 자식 간에는 범주관계가 성립된다.

예를 들어 자식의 인스턴스는 부모 클래스 자료형에 속한다. 

 

즉, 특정 자료형(부모 클레스)에 여러 자료형(자식 클레스)가 들어올 수 있는 것이 다형성이다. 

 

그래서 부모 클래스의 배열(buttons)에 자식클래스의 인스턴스(toggleButton, shutdownButton, button)들을 넣고

instanceof 연산자를 통하여 원하는 자식클래스의 동작만 수행하는 예제가 존재한다. 

 

이때 메소드 오버라이딩이 되어있다면 그냥 

for (Button btn : buttons)

{ if (btn instanceof ShutDownButton) continue; btn.func();}

 

할 수도 있지만 자식클래스의 특정 메소드를 실행시키고 싶다면

명시적 타입 변환을 알려줘야한다. 

'languages > java' 카테고리의 다른 글

[JAVA] 제네릭의 언박싱을 탐구해보자  (0) 2024.08.04
[JAVA] 함수형 인터페이스와 스트림.  (0) 2024.02.02
[JAVA]static과 접근제어자.  (0) 2023.10.29
[JAVA] method  (0) 2023.10.22
[JAVA]for each  (0) 2023.10.22