초급JAVA 11 - 상속, 오버라이딩, super, super(), 다형성
상속
- 기존의 클래스를 물려받아 새로운 클래스를 만드는 것이다.
- class 자식클래스명 extends 부모클래스명{}
- 부모클래스의 생성자와 초기화블럭을 제외한 모든 멤버를 물려받는다.
- 하나의 클래스만 상속받을 수 있다.
- 상속받지 않는 모든 클래스는 Object 클래스를 상속받는다.
- 자식클래스는 부모클래스의 멤버 외의 새로운 멤버를 가질 수 있으므로 자식클래스는 부모클래스보다 크거나 같다.
- 두개 이상의 클래스를 만드는데 공통된 멤버가 있는 경우 부모 클래스로 만든다.
public class SampleParent {
String var;
{
var = "초기화 블럭은 돌려주지 않는다.";
}
SampleParent(){
var = "생성자도 물려주지 않는다.";
}
int method(int x, int y){
return x + y;
}
}
public class SampleChild extends SampleParent {
void childMethod(){
System.out.println(var); //상속받은 변수
System.out.println(method(7,13)); //상속받은 메서드
}
오버라이딩
- 상속받은 내용을 다른 내용으로 바꾸고 싶을 때 메서드를 다시 생성하는 것
//오버라이딩 : 상속받은 메서드의 내용을 재정의 하는 것 @Override //어노테이션 : 클래스, 변수, 메서드 등에 표시해 놓는 것 int method(int x, int y){ //부모클래스와 리턴타입, 메서드 , 파라미터 전부 다 똑같이 적고 return x * y; //내용만 다르게 }
super
- 부모클래스와 자식클래스의 메서드 또는 변수의 이름이 중복될 때 구분하기 위해 사용함
super()
- 생성자 안에서 부모 클래스를 호출할 때 사용함
//super, super()
int var;
void test(double var){
System.out.println(var); //지역변수
System.out.println(this.var); //인스턴스 변수
System.out.println(super.var); //부모 클래스의 인스턴스 변수
//super : 부모 클래스의 멤버와 자식클래스의 멤버가 이름이 중복될 때 둘을 구분하기 위해 사용한다.
System.out.println(this.method(10, 20)); //내가 만든 메서드
System.out.println(super.method(10, 20)); //부모 클래스에서 상속받은 메서드
}
SampleChild(){
super(); //부모 클래스의 생성자 호출
//super()를 통해 클래스의 생성자를 호출하고 부모클래스의 인스턴스 변수도 초기화한다.
//super()가 없으면 컴파일러가 자동으로 super()를 넣어준다.
}
다형성
- 부모타입의 변수를 가지고 자식타입 객체를 사용하는 것
public static void main(String[] args) {
SampleChild sc = new SampleChild(); //변수와 객체의 타입이 같음
SampleParent sp = new SampleChild(); //변수와 객체의 타입이 다를 수 있다. (변수와 객체의 타입이 상속관계에 있어야 가능)
//SampleChild2
//SampleChild3
//SampleParent : 멤버 2개
//SampleChild : 상속받은 멤버 2개 + 4개 = 6개
//sc = sp; //형변환 생략안됨
sc = (SampleChild)sp; //자식 타입으로 형변환해야함
//부모 -> 자식클래스는 자동 형변환 되지 않는다.
sp = sc; //자동 타입 변환 : 형변환이 생략, 자식 -> 부모클래스는 자동 형변환이 가능하다.
}
Author And Source
이 문제에 관하여(초급JAVA 11 - 상속, 오버라이딩, super, super(), 다형성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hazel_jo/초급JAVA-11-상속-오버라이딩-super-다형성저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)