★상속-개념이해

정은지·2022년 8월 1일
0

상속 extend (확장시켰다는 뜻)

상속 관계에 있는 객체의 생성
-서브클래스의 객체는 슈퍼클래스의 메소드를 사용할 수 있음

private에 직접 접근할 수 없어서 개터 서터를 통해서 private에 접근할 수 있다.


----> person의 생성자를 호출하지 않아서 뜨는 오류 문구. (person의 생성자는 매개변수가 있어서 jvm이 자동으로 생성하지 못함)

학생의 이름을 받아오고 person의 전달함

최종적으로 Person 클래스의 name에 정보가 들어감


using Fields 사용 하기 (생성자 자동으로 만들기)


자식이 먼저 태어났다는 뜻. super 클래스가 먼저 와야됨.
순서 바꾸면 오류 없어짐 근데 메뉴가 알아서 만들어줘서 직접 입력할 일 없음

오버라이딩-똑같이 만들어야함
오버라이딩할 때는 @Override 붙여줘야함

오버라이드 할 때는 메소드 이름이 같아야함.
오버라이드 했는데 메소드 이름 달라서 뜨는 오류 문구


오버라이딩 자동으로 하는 법
컨트롤 스페이스를 누른다 .
taste 를 선택한다.

오버라이드 자동으로 하는 선태지가이ㅣㅅ다 잘 보면


1. 첫번째 브이표시는 필드를 통해서 생성자를 만들겠다는 뜻
2. 두번째는 필드 없어도 생성자를 만들 수 있음

★정적 바인딩(?)
자바는 동적 바인딩

업캐스팅.

person p 이후의 과정이 끝나고 new Alba 메모리가 만들어짐.

객체 == 인스턴스

instancof 연산자

  • 특정 인스턴스가 어떤 클래스 타입인지를 점검하는 연산자
  • 해당 클래스 타입이면 true 반환, 아니면 false 반환
    		System.out.println(p instanceof Person);
    		System.out.println(p instanceof Student);
    		System.out.println(p instanceof Alba);
  • p가 Student 타입의 인스턴스이면 study()메소드를 호출할 수 있다.
      if (p instanceof Student) {
    			((Student) p).study();
    		}
    					///p를 student타입으로 바꾸고 study호출함
                  
                  
                  

Object 클래스

- 모든 클래스의 공통 메소드
- toString(클래스를 문자열로 바꿀 때)
- boolean equals(Object __) - 맞는지 아닌지 비교함
- 모든걸 저장할 수 있는 만능 타입


Object 클래스 확인 가능.

  1. 클래스 반환
  2. 해시코드 값 - 메모리 참조값으로 구성되어있음.
  3. wait 쓰레드 값 묶을 때 쓰는 (?)
    (여기서 쓰레드 관련은 총 5개임)

예제 1
클래스 Person

package ex12_ObjectClass;

public class Person {

public void eat() {
	System.out.println("먹는다");
}

}

클래스 Main

p.eat을 호출하지 못하는 상태

호출할려면 ? 다운캐스팅을 해야함

package ex12_ObjectClass;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
	
		//Object 클래스는 모든 객체(변수)를 저장할 수 있다.
		Object p = new Person();

	
		//Object클래스 타입의 객체는 
		// 항상 다운캐스팅해서 사용해야 한다.
		if(p instanceof Person	) {
		((Person) p).eat();
		}
	}

}

● Object클래스 오버라이딩

	@Override
	public String toString() {            
    //어떤 객체가 가지고 있는 값을 찍어볼 때 syso로 찍어보는거임
	return "이름 : " + name;
	}
    
    

Mian 클래스

♥소스메뉴에 toString 만드는거 있음

  • Object는 모든 걸 저장할 수 있다.
  • object에서 저장된 객체는 캐스팅해서 사용한다 .
  • 객체 정보 확인을 위해서는 toString()메소드를 만든다.
  • 객체정보 비교를 위해서는 equls()메소드를 만든다
    : source메뉴에 가면 toString(), equals()만들어 준다.

    추상메소드

    -추상메소드
    -본문이 없는 메소드
    -호출용으로 사용되는 메소드
    -중괄호 자체를 없애고 세미콜론(;)을 추가함
    -public abstract 또는 abstract public


▲추상메소드 만드는 방법 :
본문 없애고 ab~붙여줌

추상 클래스

//1. 추상 메소드가 한 개 이상 존재하는클래스
//2. public abstract class
//3. 본문이 없는 메소드를 포함하기 때문에 객체 생성이 불허(▼참고)

//4. 추상클래스를 상속 받는 클래스는 반드시 모든 추상메소드를 overrride 해야함(▼참고)

▲설명 :
1번엔 abstract가 있지만
2번엔 abstract가 없다

추상클래스는 타입(?)으로 사용함


boolean의 개터새터는 다르게 생성됨 (메소드명참고)
boolean Alive;로 해도 동일한 Gatter/Setter가 생성됨

0개의 댓글