ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA 상속과 오버라이딩(Overriding)
    back-end&DB/Java 2023. 5. 19. 23:18
    728x90

    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
Designed by Tistory.