7장 - 재사용 클래스

5694 단어

Think in java 독서 노트


pikzas


2019.03.06


제7장 복용류


지식점


1. JAVA의 클래스 재사용 방법

  • 콤보
  • 상속
  • 에이전트
  • 1.1.그룹에서 클래스 A를 클래스 B의 속성으로 표현한 것은 B에 A라는 개념이 있다는 것이다.


    예를 들어 자동차 카는 엔진 Engine과 같은 관계가 있다
    class Car{
        private Engine engine;
    }

    1.1.1.조합이 가져온 초기화 문제
    앞에서 초기화의 몇 가지 절차를 언급한 바와 같이 조합된 기본 데이터 형식은 불러오기가 끝난 후에 비워두기 (0 또는 0.0 또는false 등) 인용 데이터 형식은 불러오기가 끝난 후에null로 설정합니다.
    인용 형식 초기화의 네 가지 방식
  • 대상을 정의하는 곳(이 방식은 구조기가 호출되기 전에 실행할 수 있다)
  • class Demo{
        private int i = 21;
    }
    
  • 류의 구조기 중
  • class Demo{
        private int i;
        public Demo(){
            i = 22;
        }
    }
  • 이 대상을 사용하기 전(타성 초기화) 일부 대상은 대상을 만들 때 초기화하거나 자원을 너무 많이 소모할 필요가 없다.
  • class Demo{
        private SomeThingBig someThingBig;
        public void method(){
            if(someThingBig==null){
                someThingBig = new SomeThingBig();
                //            
            }
        }
    }
    
  • 실례 초기화
  • class Demo{
        private int x;
        {
            x = 123;
        }
    }

    1.2.클래스 A를 클래스 B의 하위 클래스로 표현하는 것은 클래스 A가 B클래스의 하위 집합이라는 개념을 계승한다.


    예를 들어 빨간색 레드는 컬러 컬러의 일종이에요.
    class Red extends Color{
        
    }

    1.2.1.상속된 일부 설명 하위 클래스가 부모 클래스의 속성과 방법에 대한 접근 권한은 패키지 클래스의 접근 권한 제어에 따른다
    따라서 부모 클래스의 속성을private로 설정하는 것을 추천합니다. 부모 클래스만 접근할 수 있습니다.모든 사람이 접근할 수 있도록 방법을public로 설정합니다
    1.2.2.보호된 키워드
    앞에서 언급한 바와 같이 만약에 하나의 속성이나 방법이 나타나서 하위 클래스에 접근하고 싶다면 보호ted로 설정하고 보호ted가 기본 패키지 접근 권한을 겸비하는 것을 주의해야 한다.
    1.2.3.부자류의 초기화
    컴파일러는 자동으로 하위 클래스의 구조기에서 하위 클래스의 구조기를 호출합니다. (하위 클래스가 없는 구조기를 겨냥합니다.) 하위 클래스가 있는 구조기나 하위 클래스가 있는 구조기만 호출하려면 하위 클래스에서 하위 클래스의 구조 방법을 수동으로 호출해야 합니다.
    1.2.4.super 키워드
    하위 클래스에서 부모 클래스의 인용을 얻으려면 슈퍼로 할 수 있습니다.
    1.2.5.만약 부자류가 존재하는 상황에서 정확한 정리 순서를 보장한다면
    클래스의 정리 순서를 실행할 때, 순서는 생성 순서와 상반된다
    1.2.6.오버로드와 다시 쓰기 (덮어쓰기) 오버로드
  • overload는 클래스에서 방법명이 같지만 방법의 매개 변수 목록이 다르다(매개 변수의 유형, 개수, 순서)는 동명의 방법을 구분하는 데 쓰인다.
  • override는 클래스의 방법 이름과 매개 변수 목록이 같고 @override 주석을 붙여서 하위 클래스가 부류 방법에 대한 수정을 나타낼 수 있음을 말한다.

  • overload 하위 클래스가 부모 클래스에 대한 방법에서 발생하면
    1.2.7.향상된 전환
    하위 클래스와 상위 클래스가 상속도에 있기 때문에 상위 클래스는 상부에 있고 하위 클래스는 하부에 있다.
    1.2.8.상속 및 초기화
    클래스 코드는 처음 사용할 때만 불러옵니다. 클래스의 첫 번째 대상을 만들 때나 클래스에 접근할 때static의 속성이나 방법을 가리킵니다. (구조 방법은 은식static입니다)
    1.2.9.계승 구조에서 클래스 초기화 과정
    package com.pikzas.thinkinjava.chapterseven;
    
    public class Insect {
        private int i = 9;
        protected int j;
        Insect(){
            System.out.println("i = " + i +" , j = " + j);
            j = 47;
        }
        private static int x1 = printInit("static Insect x1 init");
        static int printInit(String s){
            System.out.println(s);
            return 99;
        }
    }
    
    
    
    public class Bettle extends Insect {
        private int k = printInit("None Static field init");
        public Bettle(){
            System.out.println("k = " + k );
            System.out.println("j = " + j );
        }
        private static int x2 = printInit("static Bettle x2 init");
    
        public static void main(String[] args) {
            System.out.println("Bettle main method");
            Bettle b = new Bettle();
        }
    }

    bettle에서main을 실행한 결과:
    static Insect x1 init
    static Bettele x2 init
    Bettle main method
    i = 9 , j = 0
    None Static field init
    k = 99
    j = 47

    분석 로드 프로세스
  • 첫 번째 단계는 베틀의main 방법을 호출하여 베틀을 만든다.class가 불러옵니다.
  • 두 번째 단계에서는 Bettle이 부모 Insect에서 상속된 것을 발견합니다.class가 불러옵니다.
  • 세 번째 단계는 맨 위에 있는 클래스 Insect의 static 속성과 방법을 메모리에서 초기화하고 static가 아닌 속성은 기본값으로 설정합니다. (static Insect x1 init 인쇄)
  • 네 번째 단계, 클래스의 static 속성과 방법을 위에서 아래로 초기화하면 static이 아닌 속성이 기본값으로 설정됩니다(static Bettele x2 init 인쇄)
  • 5단계, Bettle의main 메서드 호출(Bettle main method 인쇄)
  • 6단계, 베틀을 호출하는 구조 방법을 발견하면 기본 부류 Insert의 구조 방법
  • 을 터치합니다
  • 7단계, Insect 구조 방법을 호출하려면 Insect 클래스의 모든 구성원을 초기화해야 구조 방법을 호출할 수 있습니다(인쇄 i=9, j=0)
  • 8단계, 위에서 아래로 구조기를 호출하고 모든 구성원 변수를 초기화합니다(None Static field init 인쇄)
  • 9단계, 가장 바깥쪽 구조기 베틀() 호출(인쇄 k = 99 j = 47)
  • 1.3.에이전트가 클래스 A의 방법을 호출할 때 B는 A의 속성으로 B에게 위탁하여 집행한다


    예를 들어 자동차 카를 시동하면 실제 집행자는 Engine이다
    class Car{
        private Engine engine;
        
        public void start(){
            engine.start();
        }
    }

    2.final 키워드로 표현하고자 하는 의식은 바꿀 수 없다

  • 속성에 작용
  • 방법에 작용
  • class에 작용
  • 2.1.속성에 더하기


    기본 데이터 형식이라면 이 변수의 값은 더 이상 변동되지 않습니다. 인용 데이터 형식 (수조 포함) 이라면 이 변수가 가리키는 메모리 주소는 더 이상 변동되지 않지만, 대상 내부 속성은 변할 수 있습니다.
    2.1.1 컴파일 기간 상수
    세 가지 요구를 만족시키는 변수는 컴파일러 상수가 될 수 있다
  • 기본 데이터 유형은 초기
  • static 수식은 하나
  • final 수식은 상수 상용 대문자 자모에 밑줄을 긋는 것을 특별히 나타낸다
  • 2.1.2.공백final
    자바는 변수가final이라는 전제에서 초기 값을 정하지 않지만 사용하기 전에 반드시 값을 지정해야 하기 때문에 유연성을 높이고 구조기 초기화에 사용해야 한다.
    class Demo{
        private int i;
        public Demo(){
            i = 1;
        }
        public Demo(int x){
            i = x;
        }
    }

    2.2.덧붙이다


    정확히 말하면 방법에 추가된 매개 변수 목록의 수식자에 이 대상은 방법에서 변동할 수 없다는 것을 나타낸다.그렇지 않으면 잘못 보고할 것이다.
    class Demo{
        public void method(final int i){
            i = 123; //       i  ,   。
        }
    }

    2.2.1.final 및 private 키워드
    private 수식법

    2.3.클래스에 더하기


    이 클래스가 계승될 수 없고 그 중의 방법도 덮어쓸 수 없다(계승할 수 없다. 어떻게 덮어쓰는가). 그 중의 속성은 수요에 따라final인지 결정한다.

    좋은 웹페이지 즐겨찾기