ENFJ 비전공자 개발스터디

자바 Java 상속 inheritance 다형성 polymorphism 개념 및 정리 본문

Java

자바 Java 상속 inheritance 다형성 polymorphism 개념 및 정리

madb 2021. 12. 6. 10:24
반응형

what is Java inheritance? 

상속(inheritance)이란?  

상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것 =클래스 간의 계층적 관계를 구성

캡슐화, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나.   

 

기존에 정의되어 있는 클래스의 모든 필드와 메소드를 물려받아, (=기존에 작성된 클래스를 재활용 가능) 새로운 클래스를 생성가능. 

기존에 정의되어 있던 클래스 ->  부모 클래스(parent class) 또는 상위 클래스(super class), 기초 클래스(base class)

상속을 통해 새롭게 작성되는 클래스-> 자식 클래스(child class) 또는 하위 클래스(sub class), 파생 클래스(derived class)

 

자식 클래스 (=상속을 통해 새롭게 작성되는 클래스)를 설계 시 중복되는 멤버를 미리 부모 클래스(=기존 정의되어 있던 클래스)에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 된다


자식 클래스에는 부모 클래스의 필드와 메소드만이 상속되며, 생성자와 초기화 블록은 상속되지 않는다.

부모 클래스의 접근 제어가 private이나 default로 설정된 멤버는 자식 클래스에서 상속받지만 접근할 수는 없다


인터페이스의 다중 상속 허용 (implements 구현) , 클래스 다중 상속은 불허 (multiple inheritance) 

 

super() : 슈퍼 클래스 생성자를 호출하는 코드

 

상속했을때 슈퍼 super 클래스 (=상위) 멤버에 대한 서브 클래스(= 하위) 의 접근 

-> 슈퍼클래스의 private 멤버 - 서브 클래스에서 접근할 수 없음

-> 슈퍼클래스의 default 멤버 - 명시 하지 않았을때 서브 클래스가 동일한 패키지 있을때 접근 가능, 다른 패키지일 경우 접근 x

-> 슈퍼클래스의 protected 멤버 -같은 패키지 내의 모든 클래스 접근 허용, 패지지 여부와 상관없이 서브클래스 접근 가능

 


다형성  polymorphism :

부모클래스의 레퍼런스 변수가 (여러개) 자식하위  클래스의 object를 다양하게 참조할 수 있다. (= 대입 받는다) 

+ 오버라이딩까지 되어야 한다

 

캐스팅 Casting  :  타입 변환. 

 

자바에서 클래스에 대한 캐스팅은 업캐스팅, 다운캐스팅이 있다.        

업캐스팅 (아래 클래를 위 클래스로 변환) =>자동형 변환 작은놈을 큰놈으로. 

서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환하는 것 

 

downcasting in java

 

다운캐스팅(위 클래스를 아래 클래스 로 변환) 강제성 변환 큰놈으로 작은놈으로 변환시키는게 안되니 억지로 변환시키는 것

 : 업캐스팅의 반대이며 타입 변환을 명시적 지정해야 한다. 

원래의 자기 자신으로 돌린다는 의미 

 

instanceof 연산자 = 다운캐스팅을 정상적으로 처리하기 위해서 

다운 캐스팅을 하기 전, 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 

변환할 때 오류를 막을 수 있다. 이때 사용되는 예약어가 instanceof 이다. 

 

 

변수(=객체 레퍼런스) instanceof 클래스이름

true =>> 강제형 변환 가능 (다운캐스팅 가능) false =>> 다운캐스팅 에러

 

 instanceof는  레퍼런스 타입에만 사용된다, 기본타입에서는 사용될 수 없다.

instanceof는 클래스를 new했을때 object


메소드 오버라이딩(method overriding) = 상속을 전제 

- 한 클래스내 메소드의 이름 동일한데 parameter 파라미터()가 상이하다 (메소드를 2개 만들어놓은셈) 

 

상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를  (ex 강아지, 고양이는 먹는다() = 사료 먹는다 정상처리) 

자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것 (ex 소는 "풀먹는다" 출력해야하는 경우, 소 class에서 먹는다 ()메소드를 변경해야 한다, 즉  "풀먹는다"로 재정의해야 한다. 재정의하는 것을 오버라이딩이라 한다) 

 

서브 클래스의 객체가 생성될 때 = new 될 때 , 이때 슈퍼 클래스 생성자 1개와 서브 클래스 생성자 1개가 반드시 실행

서브 클래스의 생성자에 대해 슈퍼 클래스의 생성자를 선택하지 않은 경우 -> 호출 x -> 초기화 x -> 에러발생 

 


자바의 동적(dynamic)바인딩  바인딩에는 두 가지 방법이 있다. 

 첫 번째, 컴파일타임에 바인딩을 하는 -> static 바인딩  

두 번째, 실행할때 바인딩 -> dynamic 바인딩 (동적 바인딩)

 


this (=object내 접근시 사용, 자기자신을 의미) ->멤버변수, 멤버메소드 접근

this(parameter) -> 멤버 생성자 호출

 

super (=상위 접근시 사용) 쓰게 되면 상위 변수, 메소드 접근

super(parameter) 쓰게 되면 상위 생성자 호출하는 것임. parameter에 의해 호출대상이 결정됨

접근지정자 참고해서 접근한다.

super 첫줄에 와야함, 개발자가 명시, 컴파일러가 super()만들지 않는다.

 

 

parameter 파라미터가 없는 생성자 =>> 디폴트 default 생성자 

set 메소드 - 계속 수정할 수 있다. 

인자 argument 대입되는 값 

 

문자열은 new해야지 공간 만들어짐 

반응형