-
JAVA 상속과 오버라이딩(Overriding)back-end&DB/Java 2023. 5. 19. 23:18728x90
1. 상속
이미 작성된 클래스(상위 클래스)의 특성을 그대로 이어받아 새로운 클래스( 하위 클래스)를 생성하는 기법
기존 코드를 그대로 재사용하거나 재정의 > 재사용 + 확장
- 자바의 상속
기존 클래스의 변수(데이터)와 메소드(로직,코드)를 물려받아 새로운 클래스를 구성하는 것.
- 자바 상속의 특징
- 다중 상속을 지원하지 않는다.
- 상속의 회수에 제한을 두지 않는다.
- 모든 클래스는 java.lang.Object를 상속받는다.
1.1 class 마우스 (부모 클래스, 슈퍼 클래스)
좌측, 우측 클릭이 출력이 가능합니다.
public class Mouse { public void leftclick() { System.out.println("좌측 클릭 하기"); } public void rightClick() { System.out.println("우측 클릭 하기"); } }
1.2 extends Mouse로 상속받은 class 휠마우스 (자식 클래스, 서브 클래스)
etends로 상속을 받아 부모 클래스의 좌측, 우측 클릭하기 가능하며,
추가적으로 스크롤하기가 출력이 가능합니다.
public class WheelMouse extends Mouse { public void scroll() { System.out.println("스크롤 하기"); } }
1.3 휠마우스를 extends Mouse로 상속 받은 게이밍 마우스(자식 클래스, 서브클래스)
휠마우스를 상속했지만, 상위 클래스인 마우스에 연결이 됩니다.
좌클릭, 우클릭, 스크롤 출력이 가능하며, 특수키 w도 가능합니다.
public class GamingMouse extends WheelMouse { public void key() { System.out.println("w"); } }
1.4 상속 예제
class 전화(부모 클래스)
전화 걸기 메소드
전화 받기 메소드
class 스마트폰(자식 클래스)
음악 재생하기 메소드
인터넷 하기 메소드
public class phone { public void call() { System.out.println("전화 걸기"); } public void receive() { System.out.println("전화 받기"); } }
public class smartPhone extends phone { public void musicPlay() { System.out.println("음악 재생하기"); } public void internet() { System.out.println("인터넷하기"); } }
2. 오버라이딩(overriding)
자식클래스(서브클래스)에서 부모클래스(슈퍼클래스)와 동일한 메소드를 재정의 하는 것
- 오버라이딩의 필요성
광클릭마우스의 등장! 빠른 스피드
상속을 받아. 그대로 기능을 이용을 하지만 출력값을 변경.
public class SpeedMouse extends WheelMouse { @Override public void leftclick() { System.out.println("빠르게 좌클릭"); } @Override public void rightClick() { System.out.println("빠르게 우클릭"); }
@Override << annotation으로 컴파일러 통해 컴퓨터가 파악이 가능하다.
2.1 UpCasting(업캐스팅)
하위클래스가 상위클래스의 타입으로 자동 타입 변환 하는 것(다향성)
상위클래스의 변수,메소드에만 접근 가능
단, 하위 클래스가 상위 클래스의 메소드를 오버라이딩 한 경우 하위 클래스의 메소드 호출
- 부모 클래스
public class ParentsStore { public void makeSuta() { System.out.println("전통 수타면을 만듭니다."); } public void makeBibim() { System.out.println("비빔면을 만듭니다."); } }
- 자식 클래스
public class ChildStore extends ParentsStore { public void makeTangsu() { System.out.println("탕수육을 만듭니다."); } @Override public void makeSuta() { System.out.println("건강식 수타면을 만듭니다."); } }
자식 클래스가 부모 클래스의 makesuta를 출력을 해야 되지만.
Override를 통해 부모 클래스 makesuta 대신 자식 클래스의 내용을 출력.
2.2 DownCasting(다운캐스팅)
down casting - 상위클래스로 업캐스팅 된 하위클래스를 하위클래스로 강제로 형변환
// 자식클래스 클래스명 = new 부모클래스 // ChildStore c2 =(ChildStore) new ParentsStore(); // cs2.makeSuta(); // 안된다. ChildStore cs3 = new ChildStore(); cs3 = (ChildStore) ps2; cs3.makeSuta();
2.3 오버라이딩 예제
class weapon을 상속받아서
class 검, 도끼, 창
공격 메소드, 특수 공격 메소드를 오버라이딩을 하세요.
- 추상클래스(abstract class)란?
한개 이상의 추상메소드를 가지고 있는 클래스 -- 필수요건X
class명 앞에 abstract(추상화 하는 키워드)라고 쓴 클래스public abstract class weapon { // 추상메소드 // 바디가 구현되어 있지 않다. // 하위클래스 반드시 오버라이딩하여 구현해야하는 메소드 public abstract void attack(); public abstract void stab(); }
public class sword extends weapon { @Override public void attack() { System.out.println("검으로 공격"); } @Override public void stab() { System.out.println("검으로 찌르기"); } }
public class spear extends weapon { @Override public void attack() { System.out.println("창으로 공격"); } @Override public void stab() { System.out.println("창으로 찌르기"); } }
public class axe extends weapon { @Override public void attack() { System.out.println("도끼로 공격"); } @Override public void stab() { System.out.println("도끼로 찌르기"); } }
728x90'back-end&DB > Java' 카테고리의 다른 글
JAVA 추상과 인터페이스 (0) 2023.05.22 JAVA MVC패턴 (0) 2023.05.22 JAVA 생성자와 접근제한자 (0) 2023.05.19 JAVA 객체 지향 프로그래밍(OOP) (0) 2023.05.18 JAVA Array와 ArrayList (0) 2023.05.17