ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상속,동적생성
    언어/JAVA 2023. 7. 6. 16:40

     

    1. 상속 

     

    부모 클래스의 필드와 메서드를 자식 클래스에게 물려주는 것 

     

    2. 클래스 상속

     

    *정적멤버와 생성자, 초기화 블럭등은 상속안됨

    *인스턴스 멤버,메서드 중 public이나 protected만 super를 통해 가져올 수 있다. 

     

    3 부모생성자 호출

     super() - 부모에 필요, 다른 생성자 있으면, 자식이 따로 호출해줘야함 

     자식 객체가 생성되면 부모가 먼저 생성된 후에 자식이 생성됨

     

    4. 메소드 재정의 

     

     - 오버라이딩 ->다형성의 초석 

     - 부모의 메서드의 반환타입,메서드명,매개변수 일치하고 구현내용만 달라야한다.

     - 공변반환타입으로 리턴타입을 자식 클래스로 둘 수 도 있단다.

     - 접근제한자 좁게 불가, 새로운 예외( 더 많은 예외) 던질 수 없음 

     

     *메서드 재정의시 부모메서드 호출하고, 필요부분만 수정하면 간단하게 가능 super.~

     

    5. protected 접근제한자.

      상속과 관련 타 패키지에서 클래스 import시 protected 멤버들은 바로 사용 못하고, 상속받은 클래스에서만 사용가능     (super등으로)

      생성자가 protected면 new로 직접 생성은 불가  (자손이라도 불가)

     

     

    6 타입변환

     

    - 다형성을 위한..또 다른 

      타입변환에서 중요한 것은 실제 생성된 객체가 무엇이냐! 

      (부모형 참조변수 = 자식객체 (ok) , 자식형 참조변수 = 부모객체 (x))

       -> 자동이 아닌 downCasting은 부모형 참조변수에 담긴 자식객체를 다시 자식형 참조변수로 옮길 때만 사용

     

    7. 다형성 

     

    - 사용방법은 동일하지만, 실행 결과가 다양하게 나오는 것

     

    > 필드의 다형성 : 대입되는 객체가 달라져서 실행결과가 다양하게 나오는 것 

                               ex 멤버변수 부모형 참조변수에 여러 자식 객체 담아서 사용가능 -> 자식이 뭐냐에 따라 결과다름 

    > 매개변수의 다형성: 메서드에 클래스 타입 매개변수 있을 때 -> 어떤 클래스가 전달되냐에 따라 결과 다름 (사용방법은 동일)

     

    8. 추상 클래스

     

    - 코드 집중화, 공통 특성 추출

    - abstract 키워드로 생성 가능, 상속을 통해서만 구현가능 -> new 불가 

    - 추상클래스도 필드,생성자,메서드 정의가능 

     

    > 추상 메서드와 재정의

     

    - abstract 메서드 -> 더 간결한 오버라이딩 - 함수 선언부만 존재 

     

    9. 봉인된 클래스 (나중에)

     

     

     

     

    * 번외

     

    클래스 정적 생성 vs 동적 생성 

     

    기본적으로 정적으로 생성한다는 것과 동적으로 생성한다는 것은 

     

    -컴파일 타임에서 자료형이 결정되는가? (자료형에 의해 값이 제한되는가?)

    - 대입된 값에 따라 자료형이 달라지는가? 

    두가지가 결정한다.

     

    int a = 5;
    
    Myclass a = new Myclass();
    
    public void myMethod(Myclass a){
      a.run();
    }
    
    //등등 자료형이 미리 결정된 것들
    
    //int타입에는 int외에 값을 집어넣을 수 없고, Myclass에도 마찬가지이다.
    //정적으로 결정되는 것들은 컴파일 되면서 초기화된다.
    let a = // 실수, 정수, 스트링 등등 값에 의해 변수의 자료형이 결정 (자바스크립트)

     

    자바에서 동적바인딩 및 생성

     

    //오버라이딩 
    class NewClass extends Myclass{ @Override run()}
    class NewClass2 extends Myclass{@Override run()}
    
    public void method (Myclass a){
      a.run()
    }
    // 어떤 자손이 대입되느냐에 따라 행위가 결정됨
    
    
    
    //동적 로딩(객체생성)
    
    Class obj = Class.forName("패키지명.클래스명"); //클래스가 메모리에 로딩되는 것 뿐 객체생성은 아님
    obj.newInstance();를 통해 클래스의 인스턴스 생성가능
    
    //Class라는 참조변수에 어떠한 클래스라도 담을 수 있다. 대입되는 클래스가 무엇이냐에 따라 결정됨
    
    //번외로 Class참조변수에 담기는 class객체는 
    클래스.class혹은 클래스.getClass()로 얻을 수도 있다.

     

    Class객체는 클래스당 1개 존재 

    클래스 로더에 의해 메모리에 올라갈때 자동생성

    기존에 생성된 클래스 인스턴스가 있으면, 이걸 참조해서 Class객체 반환 없으면 지정된 ClassPath를 따라 Class객체로 반환

    - 클래스에 생성된 모든 정보 (메서드,필드) 담고 있음 -> Class를 통해 사용도 가능! 

     

    *ex JDBC에서 드라이버 로딩할 때 사용

    (라이브러리에 존재 -> runtime메모리에 클래스를 로딩해서 메모리에 배치한 것 ->객체 생성하거나 그런건 아님 )

          - 어플리케이션 실행시 모든 클래스들 로딩하는 거아님 필요한거만 로딩함 

          

     

    '언어 > JAVA' 카테고리의 다른 글

    -JavaNextStep (1) - Junit  (0) 2023.07.10
    중첩 선언과 익명 객체  (0) 2023.07.07
    람다식  (0) 2023.07.05
    객체지향 - 캡슐화  (0) 2023.06.12
    자바 - 입출력(I/O) (1) 바이트기반 스트림/ 문자기반 스트림  (0) 2023.05.14
Designed by Tistory.