○ 상속 (inheritance)
- 객체지향 프로그래밍의 특징 중 하나 (참고 : OOP의 특징)
- 기존의 클래스(부모)가 가지고 있는 필드와 메소드를 그대로 물려받아 새로운 클래스(자식)를 만드는 것
- 쉽게 말하면, 클래스의 재활용
- 부모와 자식, 조상과 후손(파생), superclass와 subclasses
- 종단(final) 클래스는 상속받을 수 없다 (참고 : JAVA, final )
- private 속성은 상속받을 수 없다
- 클래스 간의 상속은 단일 상속만 가능하다 (하나의 클래스만 상속받을 수 잇음)
- extends 확장 / implements 구현
- 형식) class 자식(서브)클래스 extends 부모(슈퍼)클래스 { 서브클래스 내용 }
class 자식(서브)클래스 implements 부모인터페이스 { 서브클래스 내용 }
package oop0408;
// final class AA {} → 종단 클래스는 상속받을 수 없다
class AA{
private void zero() {} //상속되지 않음
public void one() {
zero();
System.out.println("AA.one()...");
}
public void two() {
System.out.println("AA.two()...");
}
}//AA class end
class BB extends AA{ //자식클래스BB, 부모클래스AA
//one(), two()가 보이지 않지만 상속되어서 사용가능
public void three() {
System.out.println("BB.three()...");
}
}//BB class end
class CC extends BB{ //자식클래스CC, 부모클래스BB
public void four() {
System.out.println("CC.four()...");
}
}//CC class end
/*
class DD{}
class EE extends AA, DD {} 에러, 클래스간의 상속은 단일상속만 가능하다 (다중상속 불가)
*/
public class Test03_inheritance {
public static void main(String[] args) {
AA aa=new AA();
aa.one();
aa.two();
//aa.zero(); 에러, private속성은 클래스 내부에서만 접근 가능하다
BB bb=new BB();
bb.one();
bb.two();
bb.three();
// bb.zero(); 에러, private속성은 상속되지 않는다
CC cc=new CC();
cc.one();
cc.two();
cc.three();
cc.four();
}//main() end
}//class end
○ override
- Method Override, 함수 재정의
- 상속관계에서 물려받은 메소드를 다시 수정(리폼)
- final메소드는 상속은 가능하지만 오버라이드는 할 수 없다 (참고 : JAVA, final )
package oop0408;
class Korea {
String name="대한민국";
final void view() {
System.out.println("Korea.view()...");
}//view() end
void disp() {
System.out.println("Korea.disp()..."+name);
}//disp() end
}//class end
class Seoul extends Korea {}//class end
class Busan extends Korea {
String name="부산광역시";
@Override
void disp() {
System.out.println("Busan.disp()..."+name);
}
/*
@Override
void view() {} 에러, final메소드는 오버라이드할 수 없다
*/
}//class end
public class Test04_override {
public static void main(String[] args) {
// 1) 오버라이드 하기 전
Seoul seoul = new Seoul();
seoul.disp(); //Korea.disp()...대한민국
seoul.view(); //Korea.view()...
// 2) 오버라이드 한 후
Busan busan = new Busan();
busan.disp(); //Busan.disp()...부산광역시
busan.view(); //Korea.view()...
}//main() end
}//class end
○ super
- super : 부모, 조상
- superclasses(부모클래스들) / subclasses(자식클래스들)
- 상속관계에서 생성자 함수 호출순서 : 부모생성자가 먼저 호출되고 자신의 생성자 함수가 호출
package oop0411;
class School extends Object {
String name="학교";
public School() {
System.out.println("School()...");
}
}//class end
class MiddleSchool extends School {
public MiddleSchool() {
super(); //부모 생성자 함수 호출(생략가능)
System.out.println("MiddleSchool()...");
}
public void disp() {
System.out.println(name); // 학교(부모에게 물려받은 값)
}
}//class end
class HighSchool extends School {
String name="고등학교";
public HighSchool() {
super();
System.out.println("HighSchool()...");
}
public void disp() {
String name="종로고등학교";
System.out.println(name); // 종로고등학교(지역변수)
System.out.println(this.name); // 고등학교(나의 멤버변수_
System.out.println(super.name); // 학교(부모의 멈버변수)
}
}//class end
public class Test01_super {
public static void main(String[] args) {
//school() → MiddleSchool()
MiddleSchool ms=new MiddleSchool(); //School()... MiddleSchool()...
ms.disp(); //학교
//school() → HighSchool()
HighSchool hs=new HighSchool(); //School()... HighSchool()...
hs.disp(); //종로고등학교 고등학교 학교
}//main end
}//class end
- super 와 this 비교 (부모 super, 나 this)
package oop0411;
class Parent {
int one, two;
public Parent() {}
public Parent(int one, int two) {
this.one=one;
this.two=two;
}
}//class end
class Child extends Parent {
int three;
public Child() {}
public Child(int a, int b, int c) {
//상속받은 멤버변수(one, two)에 초기값 전달
super(a,b);
this.three=c;
}
}//class end
public class Test02_super {
public static void main(String[] args) {
// super, super(), this, this() 활용한 클래스 설계
Child child = new Child(10, 20, 30);
System.out.println(child.one); //10
System.out.println(child.two); //20
System.out.println(child.three); //30
}//main() end
}//class end
○ Object 클래스
- 자바의 최고 조상 클래스 : Object클래스
- 자바의 기본 패키지(java.lang)에 선언되어 있음 → java.lang.Object
- 자바의 모든 클래스는 무조건 Object클래스를 상속 받는다
- 자바의 모든 클래스는 Object클래스의 후손들이다
package oop0408;
class Jeju extends Object {
@Override
public String toString() {
return "제주도";
}
}//class end
class Suwon extends Object {
private String id="soldesk";
private String pw="1234";
@Override
public String toString() {
return "Suwon [id=" + id + ", pw=" + pw +"]";
}
}//class end
class Incheon extends Object {
private String name="인천광역시";
private String phone="789-8745";
@Override
public String toString() {
return "Incheon [name=" + name + ", phone=" + phone + "]";
}
}//class end
public class Test05_Object extends Object { //extends Object 생략가능
public static void main(String[] args) {
Jeju jeju=new Jeju();
System.out.println(jeju.toString());
Suwon suwon=new Suwon();
System.out.println(suwon.toString());
System.out.println(jeju);
System.out.println(suwon);
Incheon incheon=new Incheon();
System.out.println(incheon.toString());
System.out.println(incheon);
}//main() end
}//class end
'Backend > JAVA_Basic' 카테고리의 다른 글
21. JAVA, 추상화 (추상 클래스, 추상 메소드, 인터페이스, 익명내부객체) (0) | 2022.06.05 |
---|---|
20. JAVA, 다형성(polymorphism) (0) | 2022.06.04 |
18. JAVA, 날짜 관련 클래스(GregorianCalendar, Calendar, Date, SimpleDateFormat) & 연습문제 (0) | 2022.06.03 |
17. JAVA, getter와 setter함수 (0) | 2022.06.02 |
16. JAVA, final (final클래스, final메소드) & 연습문제 (0) | 2022.06.02 |
댓글