상속이란?

2023. 1. 12. 00:36개발/용어

 

상속 기능을 사용할 때는 extends 예약어를 이용하면 된다.

 

 

ExtendsTest

 

 

 

ExtendsTest2

 

 

Sub 클래스가 Super 클래스에게 상속받고 Subsub 클래스가 Sub 클래스에게 상속받은 코드이다. Super 할아버지 Sub이 부모 Subsub이 자식 같은 느낌

 

OverridingTest

 

 

오버라이딩 성립 규칙

 

  1. 부모 클래스와 자식 클래스 사이에만 성립 가능
  2. Static 메소드는 클래스에 속하는 메소드라 상속 자체가 안됨. 따라서 오버라이딩도 안됨
  3. 접근 제한자가 private으로 정의된 메소드는 상속 자체가 안됨. 오버라이딩X
  4. Interface 구현해서 메소드를 오버라이딩  할땐 반드시 접근 제한자를 public으로 정의해야함.
  5. 메소드의 인자의 개수와 타입이 완전히 일치해야하고, 리턴 타입도 일치해야함.
  6. 부모 클래스의 메소드 접근 제한자보다 좁아질 없다.
  7. 부모 클래스의 메소드보다 많은 예외를 던질 없다.
  8. Final 예약어가 지정된 메소드는 오버라이딩X

 

OverridingTest2

 

자식 클래스에서 부모 클래스로부터 상속받은 변수와 같은 이름으로 재정의하면 부모 클래스에서 정의한 변수는 은닉되고 자식 클래스에서 다시 정의한 변수가 인식된다.

 

SuperTest

 

This 자기 자신 객체를 가리키는 래퍼런스 변수인 반면 super는 부모 객체를 가리키는 레퍼러느 변수다. this()가 자기 자신 클래스의 다른 생성자를 호출하는 역할을 하는 예약어라면, super()는 부모 클래스의 생성자를 호출하는 역할을 한다. (자바 클래스에서 인스턴스 메소드 안에서 호출되는 변수나 메소드 앞에는 this가 생략되어 있다.)

 

 

SuperConstructorTest

 

상속 관계에 있는 자식 클래스의 생성자를 호출하면 자식 클래스 생성자의 줄에 super() 자동으로 삽입 되면서 부모 클래스의 생성자부터 호출한다. 그런데 super() 의해 부모의 생성자가 자동으로 호출되는데? 부모 클래스에 인자 있는 생성자만 있다면 컴파일러가 자동으로 생성자를 만들어 주지 않기 때문에 컴파일 에러가 생긴다. 경우에 super() 생성자를 이용해 명시적으로 부모 클래스의 인자 있는?? 생성자를 호출해야 한다.(?????)

 

 

 

 

SuperVariableTest

 

 

'개발 > 용어' 카테고리의 다른 글

Argument란?  (0) 2023.01.10
Static이란?  (0) 2022.12.27
상수(constant)란?  (0) 2022.12.23
인스턴스란(instance)?  (0) 2022.12.20
Tomcat(Apache Tomcat)  (0) 2022.10.31