CGB2202 객체 지향 6일차

객체 지향 6일차:

잠수함 게임 1일차:

  1. 6개 클래스 디자인, 월드 클래스 디자인 및 테스트

잠수함 게임 2일차:

  1. 6개의 클래스에 생성자를 추가하고 테스트

잠수함 게임 3일차:

  1. 정찰 잠수함 어레이, 어뢰 잠수함 어레이, 기뢰 잠수함 어레이, 기뢰 어레이 및 깊이 장약 어레이 설계 및 테스트
  2. SeaObject 슈퍼클래스를 디자인하고 슈퍼클래스를 상속받을 6개의 클래스를 디자인합니다.
  3. 각각 6개의 클래스에서 호출되는 SeaObject용으로 두 가지 생성 방법이 설계되었습니다.

잠수함 게임 4일차:

  1. 정찰 잠수함 어레이, 어뢰 잠수함 어레이 및 기뢰 잠수함 어레이를 SeaObject 어레이로 결합하고 테스트
  2. 6개의 클래스에서 move() 이동을 재정의하고 테스트합니다.
  3. 그리기 창

잠수함 게임 5일차:

  1. 클래스의 구성원에 액세스 제어 수정자 추가
  2. 이미지 이미지 클래스 만들기

잠수함 게임 6일차:

  1. 디자인 창의 너비와 높이는 일정하므로 적절하게 수정합니다.
  2. 바다 지도 및 개체 그리기:
    • 객체를 그리려면 객체의 그림을 가져와야 합니다.각 객체가 그림을 얻을 수 있으므로 그림
      을 가져오는 동작이 일반적인 동작입니다.따라서 SeaObject 클래스에서
      각 객체의 동작은 그림을 가져오는 객체가 다르기 때문에 디자인은 Abstract method
      ---- design abstract method getImage() in SeaObject to get image
    • 6개의 파생 클래스에서 getImage()를 다시 작성하여 개체의 그림을 가져옵니다.
      ---- getImage()를 다시 작성하여 그림을 가져옵니다.
    • 살아있는 물체만 창에 그려야 하기 때문에 물체의 상태를 디자인할 필요가 있습니다.
      각 물체는 상태를 가지고 있으며, 이는 상태가 공통 속성임을 의미합니다.따라서 SeaObject의 디자인에서
      상태는 일반적으로 상수로 설계되고 상태변수가 동시에 설계되어 현재 상태
      를 나타냄 ----SeaObject에서 설계한 상태상수 LIVE와 DEAD는 현재 상태를 나타내고 상태변수는 현재 상태를 나타낸다
      . 객체의 상태를 판단해야 합니다. 각 객체는 상태를 판단할 수 있으므로 상태
      를 판단하는 동작은 일반적인 동작입니다. , SeaObject에서 설계되었으므로
      상태를 판단하는 각 객체의 동작은 동일합니다. 그래서 일반적인 방법으로 설계되었습니다
      ---- SeaObject에서 isLive(), isDead()를 설계하여 객체의 상태를 판단합니다
    • 데이터가 있으면 그리기를 시작할 수 있습니다.모든 개체를 그릴 수 있으므로
      그리기 개체의 동작이 공통 동작이므로 SeaObject에서
      각 개체에 대한 그리기 개체의 동작은 동일하므로 일반적인 동작으로 설계되었습니다.방법
      ----그림을 그리기 위해 SeaObject에서 paintImage()를 디자인하십시오----------그리는 방법, 숙달이 필요하지 않음
    • 객체를 그리는 동작이 완료되었습니다. 창 World에서 호출하기만 하면 됩니다.
      • 물건을 준비하다
      • paint() 메소드 재정의 ------ paintImage() 메소드 호출

검토:

  1. 패키지 및 가져오기:
  2. 액세스 제어 수정자: ------ 데이터를 안전하게 유지
    • public: public, 모든 클래스
    • private: private, 이 클래스
    • protected: protected, 이 클래스, 파생 클래스 및 동일한 패키지 클래스
    • 기본값: 아무것도 쓰지 않음, 이 클래스, 동일한 패키지 클래스
  3. final: 최종,
    변경할 수 없는 변수는 변경할 수 없으며 메서드를 재정의할 수 없으며 클래스를 상속할 수 없습니다.
  4. 정적: 정적
    • 정적 변수: 정적, 클래스, 메소드 영역, 하나의 사본, 모든 객체가 공유하는 데이터(그림, 오디오, 비디오)
    • 정적 메서드: 정적, 클래스, 메서드 영역, 하나의 복사본, 암시적 이 전송 없음, 인스턴스 멤버에 직접 액세스할 수 없음
      메서드의 작업은 개체와 관련이 없습니다.
    • 정적 블록: 정적, 클래스, 클래스가 로드될 때 자동으로 실행, 한 번
      정적 리소스(이미지, 오디오, 비디오) 로드/초기화

메모:

  1. 정적 최종 상수:

    • 초기화하는 동안 선언해야 함
    • 액세스할 클래스 이름 포인트, 변경할 수 없습니다.
    • 제안: 상수 이름의 모든 문자는 대문자로 표시되고 여러 단어는 _로 구분됩니다.
    • 컴파일러는 컴파일 시간에 상수를 특정 숫자로 직접 교체하므로 효율적입니다.
    • 사용 시기: 데이터는 절대 변경되지 않으며 자주 사용됩니다.
    public class StaticFinalDemo {
          
          
        public static void main(String[] args) {
          
          
            System.out.println(Aoo.PI); //常常通过类名点来访问
            //Aoo.PI = 3.1415926; //编译错误,常量不能被改变
    
            //1)加载Boo.class到方法区中
            //2)静态变量num一并存储到方法区中
            //3)到方法区中获取num的值并输出
            System.out.println(Boo.num);
    
            //编译器在编译时会将常量直接替换为具体的值,效率高
            //相当于System.out.println(5);
            System.out.println(Boo.COUNT);
        }
    }
    
    class Boo{
          
          
        public static int num = 5; //静态变量
        public static final int COUNT = 5; //常量
    }
    
    class Aoo{
          
          
        public static final double PI = 3.14159;
        //public static final int NUM; //编译错误,常量必须声明同时初始化
    }
    
  2. 추상 방법:

    • 초록에 의해 수정됨
    • 메서드 정의만 있고 구체적인 구현 없음({}도 아님)
  3. 추상 클래스:

    • 초록에 의해 수정됨
    • 추상 메서드를 포함하는 클래스는 추상 클래스여야 합니다.
    • 추상 클래스를 인스턴스화할 수 없습니다(새 개체).
    • 추상 클래스는 상속된 파생 클래스가 필요합니다.
      • 모든 추상 메서드 재정의 ------------------ 불완전 변경을 완료로 변경
      • 또한 추상 클래스로 선언됨 ------------------ 일반적으로 다음과 같이 사용되지 않음
    • 추상 클래스의 의미:
      • 공통 속성 및 동작 캡슐화 --------------- 코드 재사용
      • 모든 파생 클래스에 대한 통합 유형 제공 - 상향 스타일 지정
      • 모든 파생 클래스에 대한 통합 항목을 제공하는 추상 메서드를 포함할 수 있습니다(지시 가능)
        파생 클래스의 동작은 다르지만 항목은 동일하며 표준을 정의하는 것과 동일합니다(필수 재작성)

에센스 노트:

  1. 정적 최종 상수:
    • 초기화하는 동안 선언해야 함
    • 액세스할 클래스 이름 포인트, 변경할 수 없습니다.
    • 제안: 상수 이름의 모든 문자는 대문자로 표시되고 여러 단어는 _로 구분됩니다.
    • 컴파일러는 컴파일 시간에 상수를 특정 숫자로 직접 교체하므로 효율적입니다.
    • 사용 시기: 데이터는 절대 변경되지 않으며 자주 사용됩니다.
  2. 추상적인 방법:
    • 초록에 의해 수정됨
    • 메서드 정의만 있고 구체적인 구현 없음({}도 아님)
  3. 추상 클래스:
    • 초록에 의해 수정됨
    • 추상 메서드를 포함하는 클래스는 추상 클래스여야 합니다.
    • 추상 클래스를 인스턴스화할 수 없습니다(새 개체).
    • 추상 클래스는 상속된 파생 클래스가 필요합니다.
      • 모든 추상 메서드 재정의 ------------------ 불완전 변경을 완료로 변경
      • 또한 추상 클래스로 선언됨 ------------------ 일반적으로 다음과 같이 사용되지 않음
    • 추상 클래스의 의미:
      • 공통 속성 및 동작 캡슐화 --------------- 코드 재사용
      • 모든 파생 클래스에 대한 통합 유형 제공 - 상향 스타일 지정
      • 모든 파생 클래스에 대한 통합 항목을 제공하는 추상 메서드를 포함할 수 있습니다(지시 가능)
        파생 클래스의 동작은 다르지만 항목은 동일하며 표준을 정의하는 것과 동일합니다(필수 재작성)

다시 채우다:

  1. 디자인 규칙:
    • 공통 속성 및 동작을 수퍼클래스로 추출 ----------공통성 추출
    • 객체의 행위가 같으면 일반 방식으로
      설계 객체의 행위가 다르면 추상 방식으로 설계
    • 객체 지향 8일차
  2. 추상 메서드/추상 클래스에 대한 질문:
    • 추상 메서드의 의미는 무엇입니까?
      • 업캐스팅이 발생할 때 수퍼클래스의 참조를 통해 메소드를 호출할 수 있는지 확인하십시오.
    • 그 의미는 지적할 수 밖에 없는 것이므로 일반적인 방법으로 설계해 보지 않겠습니까?
      • 공통 메서드로 설계하면 파생 클래스를 재정의하거나 하지 않을 수 있으며, 파생 클래스를 강제로 재정의할 수 있는 추상 메서드로 설계되어
        ---------- 표준이 되었고, 강제로 재정의
  3. 내일 단어:
    1)inner:内部的
    2)outer:外部的
    3)baby:孩子
    4)create:创建
    5)anonymous/anon:匿名
    6)shoot:射击
    7)next:8)one:一个
    9)action:行动
    10)enter:进入
    11)timer:定时器
    12)interval:间隔
    13)schedule:日程表
    14)task:任务
    15)repaint:重新画
    

추천

출처blog.csdn.net/jason13579/article/details/123493535