Java -7

김정현·2024년 4월 19일
0

JAVA

목록 보기
7/19

상속

클래스 상속 문법

class 자식클래스 extends 부모클래스 {

}

상속을 받을경우 상위 클래스의 자원을 사용가능하다.

생성자 함수에 super() 가 생략되어있음.

super

기본 생성자 함수에 항상 생략되어있음

지역변수
-> 상위 클래스의 객체의 주소값

참고) this : 현재 클래스의 객체의 주소 값

  • super함수(메서드)
    -> 상위 클래스의 생성자 함수를 클래스 내부에서 호출할때 사용
public class C extends B {
    int numC = 30;

    public C() {
        super();  //B클래스에 정의된 B();
        System.out.println("C 생성자!");
    }

}

하위 클래스의 객체 -> 상위 클래스의 자료형으로 자동 형변환 : 다형성

C -> A, C -> B

C c = new C();
A a = c;

     ==
        
A a = new C();

같음

참고)
instance: 실체
-클래스하고 하는 객체의 정의(존재X) -> new -> 힙공간에 존재 : 생성된 객체

instanceof 연산자 : 객체의 생성된 출처를 체크해보는 연산자

  • c instanceof C : c라고하는 참조변수가 가리키는 객체의 출처가 C클래스로부터 만든 객체인가?
		C c = new C();
        B b = new B();
        System.out.println(c instanceof B);
        
-> true

같은 상위객체를 부모로 갖더라도 하위클래스가 다르면 형변환이 어려울 수 있다.

		A ad =  new D();   //ad객체는 D의 주소를 가리킴

        A ac = new C();


		//불가
        if (ad instanceof C) {
            C c = (C) ad;
        } 

		//가능
        if (ac instanceof C) {   //상위 클래스로 올라갈 수 있는지 확인
            C cc = (C) ac;  //상위클래스로 올라감 
            System.out.println(cc.numC);
        }

상위클래스: 일반적인 개념
하위클래스: 구체적인 개념

자식과 부모 클래스에서 함수명이 같다면? (메서드 재정의)

부모 클래스와 자식 클래스에서 같은 명의 다른 기능을 가진 메서드가 존재한다면 자식 클래스에서 그 메서드를 호출한다면, 자식 클래스의 메서드로 호출된다. 자식 클래스에서 존재하지 않을경우 부모 클래스의 메서드가 호출된다.
(상속시에 인스턴스 메서드에만 가능)

  • 우선도
    하위 클래스 메서드 >> 상위 클래스 메서드

묵시적 형변환과 메서드 재정의

애노테이션: 주석, 주해
정보전달

@Override : 재정의된 메서드임을 컴파일러에게 알려주는 정보
-오타 방지

@Override
    public void Move() {
        System.out.println("두발로 직립 보행");
    }

ex) 실수로 함수명을 잘못 입력했을 경우 알려줌

재정의시 접근 제어자 변경 범위

좁은 범위 -> 넓은 범위 변경 가능

다운 캐스팅

상위 클래스에서 하위 클래스로 캐스팅한다. (확장)
instanceof와 if를 사용한다.

if (animal instanceof Human) {
                Human human = (Human) animal;
                human.reading();
            } else if (animal instanceof Tiger) {
                Tiger tiger = (Tiger) animal;
                tiger.hunting();
            }

생성자함수가 정의되어 있을 경우 super에 파라미터를 직접 입력해주어야한다.

//부모
public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
    
    
//자식
public HighSchoolStudent() {
        super(1000,  "이이름");
    }
    

추상 클래스

추상적: 어떤일을 해야할지 결정되지 않음
공통적인
1. 추상 클래스란?
구성 요소 중에서 정해지지 않은 클래스
-함수가 수행할 내용이 결정되지 않은 클래스
-함수의 정의만 있는 클래스

  • 역할: 하위 클래스가 따라야 할 설계 원칙

-하위 클래스가 공유해야할 공통적인 자원 정의 가능

  1. 추상클래스 문법
public abstract class Calculator {
    public abstract int add(int num1, int num2);

}

클래스와 추상메서드 앞에 모두 abstract 기입.

상위클래스에서 어떤 작업을 실행할지 정하지 않은 메서드를 하위클래스에서 @Override를 통해 어떤 작업을 실행할지 추가 한다.

상속이 진행되려면 객체가 되어야한다.

그래서 상속을 진행하는 부모와, 자식 클래스는 객체가 된다.

  • final 예약어
    -마지막
    -변경 불가

-변수 : 상수

-메서드 : 재정의 불가
템플릿 메서드 패턴
절차에 대한 메서드

public abstract class Car {
  public abstract void start();
  public abstract void press();
  public abstract void turnoff();
  
  //밑 메서드는 하위 클래스에서 모두 변경없이 따라야함
  public final void run() {   //템플릿 메서드 패턴
    start();
    press();
    turnoff();
  }
}

-클래스 : 상속 불가

//부모 클래스에서
public final void  commonMethod() {

    }
    
    //상속받은 클래스에서
public void commonMethod(){ //에러 발생
    }
    
    
    
    
    
public final class Car {  //상속불가
}

0개의 댓글