Notice
Recent Posts
Recent Comments
Link
컴퓨터는 잘못이 없다..
[JAVA]상속과 super, this,오버라이딩 본문
Contents
접기
[예제코드]
Phone.java
package test.main;
public class Phone{
public String s="Phone";
public int pa;
//디포트 생성자
public Phone() {
System.out.println("Phone 디포트 생성자 호출");
}
//call()메소드
public void call() {
System.out.println("집에서 전화를 Phone으로 걸어요");
}
//reDial() 메소드
public void reDial() {
System.out.println("방금 걸었던 전화를 다시 걸어요.");
}
}
Handphone.java
package test.main;
public class HandPhone extends Phone{
public int ha;
public String s="HandPhone";
//디포트 생성자
public HandPhone() {
System.out.println("HandPhone 생성자를 호출");
}
//오버라이딩
@Override
public void call() {
System.out.println("이동중에 HandPhone으로 전화를 걸어요~");
}
//HandPhone의 takePicture() 메소드
public void takePicture() {
System.out.println("사진을 찍어요.");
}
//HandPhone의 test()메소드
public void test() {
//부모클래스에 접근
//(1)super.~ 키워드로 부모클래스의 필드와 메소드에 접근가능.
int ha = super.pa; //super.~을 통해 부모의 필드에 접근가능
super.reDial(); //super.~을 통해 부모의 메소드에 접근 가능
//(2)또한 super키워드는 생략 가능하다.
int ha2 = pa;
reDial();
//자기자신의 필드에는 this로 접근가능
//(3)자기자신에 접근
this.ha=3;
//(4)this는 생략가능하다.
ha=5;
//(5)단, 부모클래스와, 자식클래스에 동일한 이름의 필드가 있을 때 String s가 부모, 자식에 둘다 존재함.
//자식클래스에서 this,super을 생략하면 자식클래스 필드를 의미한다.
System.out.println(this.s); //HandPhone
System.out.println(super.s); //Phone
System.out.println(s); //HandPhone
}
}
MainClass.java
package test.main;
public class MainClass {
public static void main(String[] args) {
System.out.println("---(6)new Phone()으로 객체 생성---");
Phone p=new Phone();
System.out.println("---(7)new HandPhone()으로 객체 생성---");
HandPhone h=new HandPhone();
Phone p2=h; //업캐스팅
HandPhone h2=(HandPhone)p2; //다운캐스팅
System.out.println("---(8)p.call()--");
p.call();//부모클래스의 메소드가 호출된다.
System.out.println("---(9)h.call()--");
h.call();//자식클래스의 오버라이딩 된 메소드가 호출된다.
System.out.println("---(10)p2.call()--");
p2.call(); //자식클래스의 오버라이딩 된 메소드가 출력된다.
System.out.println("---(11)h2.call()--");
h2.call(); //자식클래스의 오버라이딩 된 메소드가 출력된다.
h.pa=3;
System.out.println("---(12)h.pa=3대입 후 h.pa출력--");
System.out.println(h.pa);
p.pa=5;
System.out.println("---(13)p.pa=5대입 후 p.pa출력--");
System.out.println(p.pa);
System.out.println("---(14)p2.pa를 출력하면 무엇이 출력될까?--");
System.out.println(p2.pa);
}
}
▲MainClass.java 실행결과
---(6)new Phone()으로 객체 생성---
Phone 디포트 생성자 호출
---(7)new HandPhone()으로 객체 생성---
Phone 디포트 생성자 호출
HandPhone 생성자를 호출
---(8)p.call()--
집에서 전화를 Phone으로 걸어요
---(9)h.call()--
이동중에 HandPhone으로 전화를 걸어요~
---(10)p2.call()--
이동중에 HandPhone으로 전화를 걸어요~
---(11)h2.call()--
이동중에 HandPhone으로 전화를 걸어요~
---(12)h.pa=3대입 후 h.pa출력--
3
---(13)p.pa=5대입 후 p.pa출력--
5
---(14)p2.pa를 출력하면 무엇이 출력될까?--
3
[코드설명]
-HandPhone클래스는 Phone클래스를 상속받고 있다.
따라서 HandPhone클래스는 Phone클래스의 필드, 메소드에 접근 가능하다.
*여기선 부모클래스의 필드, 메소드를 모두 public으로 지정하였다!
-부모클래스로의 접근
①부모클래스의 필드, 메소드 접근은 자식클래스에서 super로 가능하다.(super은 생략가능)
②또한 자식클래스로 객체 생성 후 참조값.~~ 으로도 부모클래스의 필드, 메소드에 접근 가능하다.
*여기선 부모클래스의 필드, 메소드를 모두 public으로 지정하였다!
이때 super의 사용과, this의 사용을 (1)~(5), (12)~(14)에서 체크해보자!
-오버라이딩
상속을 받고 부모클래스의 메소드를 재정의하면 어떤일이 벌어지는지 (8)~(11)에서 체크해보자!
'공부 > JAVA' 카테고리의 다른 글
[JAVA]상속과 super, this,오버라이딩2(+final예약어/@어노테이션) (0) | 2020.12.28 |
---|---|
[JAVA]java.lang패키지 Object클래스/Object클래스와 업캐스팅, 다운캐스팅 (0) | 2020.12.07 |
[JAVA]다형성3_다운캐스팅 주의할 점 (0) | 2020.12.07 |
Comments