상속

Jan 01, 2024
상속
 
💡
  • 상속을 하려면 다형성을 꼭 지켜야한다.
    • 다형성: 하나의 유형의 이름이 여러가지로 불릴 수 있는 것 왕은 왕이기도 하지만 판사이기도 하다.
  • 상속이란 두 개의 클레스를 연결 시켜주는 것을 얘기하는데 사용 방법으로는 연결 받을 클레스 명 뒤에 extends 연결 될 클레스 명 이렇게 작성하는 것이 문법이다.
    • package ex05; class Shape { int x,y; public Shape(){ System.out.println("Shape 생성됨"); } } class Circle extends Shape{ int radius;//반지름 public Circle(int radius) { System.out.println("Circle 생성됨"); this.radius = radius; System.out.println("1"); super.x = 0;/// 부모 shpae의 멤버를 자식 메서드에서 사용하려면 super.을 붙이고 멤버를 입력 super.y = 0; } double getArea(){ return 3.14 * radius * radius; } } public class CircleTest { public static void main(String[] args) { //부모의 디폴트 생성자가 먼저 출력됨. Circle circle = new Circle(10); } }
💡
묵시적인 호출로는 원래는 상속 받을 클레스 내부에 super를 넣어줘야 되지만, 붙이지 않더라도 기본 생성자 처럼 코드에서는 보이지 않지만 자동으로 만들어준다. 단 오류가 발생하는 경우는 상속해줄 클레스 에서 매개변수가 있는 생성자를 하나만 만들어줄 경우에는 오류가 발생한다.
 

메서드 오버라이딩

💡
재정의:상속 받은 멤버의 내용을 상속받는 클레스에 주제에 맞게 바꾸는 것 단 메서드 이름이랑 매개변수는 동일 해야 한다. Override기각 시키다, 무효화하다. 동적바인딩 부모 메소드를 override하면서 자식꺼를 띄우는 것을 얘기한다. 추상화:abstract를 붙이면 추상화가 되어 object에 해당 되지않으며, 상속 받는 객체가 재정의 할 때(alt+inst 후 아래 토글 참고)문법상 메서드명이 동일하지 않으면 자바에서 잡아준다. 그러므로 실수를 안만들기 위해 사용한다.
재정의 문법
notion image
notion image
package ex06.example5; abstract class 판사 { // abstract를 붙이면 추상화가 되어 object에 해당되지 않으며 // heap메모리에 띄우려면 상속을해서 띄울 수 있다. public abstract void 심문(); } abstract class 증인 { public abstract void 대답(); } class 왕 extends 판사 { public void 심문() { System.out.println("왕은 심문한다"); } } class 왕비 extends 판사 { public void 심문() { System.out.println("왕비는 심문한다"); } } class 모자장수 extends 증인 { public void 대답() { System.out.println("모자장수는 대답한다"); } } class 토끼 extends 증인 { public void 대답() { System.out.println("토끼는 대답한다"); } } class 엘리스 extends 증인 { @Override public void 대답() { System.out.println("엘리스는 대답한다"); } } class 호랑이 extends 증인 { public void 대답() { System.out.println("호랑이는 대답한다"); } } class 고양이 extends 증인 { @Override public void 대답() { System.out.println("고양이는 대답한다"); } } class Game { public void 심문(판사 u1) { u1.심문(); } public void 대답(증인 u1) { u1.대답(); } } public class AliceApp { public static void main(String[] args) { 왕비 u1 = new 왕비(); 모자장수 u2 = new 모자장수(); 왕 u3 = new 왕(); 토끼 u4 = new 토끼(); 엘리스 u5 = new 엘리스(); 호랑이 u6 = new 호랑이(); 고양이 u7 = new 고양이(); Game game = new Game(); game.심문(u3); game.대답(u7); } }

객체지향 2: 오브젝트를 추상화 시켜서 만든다.(상속해서 만든다.)

 
 
Share article
RSSPowered by inblog