객체 지향 6일차:
잠수함 게임 1일차:
- 6개 클래스 디자인, 월드 클래스 디자인 및 테스트
잠수함 게임 2일차:
- 6개의 클래스에 생성자를 추가하고 테스트
잠수함 게임 3일차:
- 정찰 잠수함 어레이, 어뢰 잠수함 어레이, 기뢰 잠수함 어레이, 기뢰 어레이 및 깊이 장약 어레이 설계 및 테스트
- SeaObject 슈퍼클래스를 디자인하고 슈퍼클래스를 상속받을 6개의 클래스를 디자인합니다.
- 각각 6개의 클래스에서 호출되는 SeaObject용으로 두 가지 생성 방법이 설계되었습니다.
잠수함 게임 4일차:
- 정찰 잠수함 어레이, 어뢰 잠수함 어레이 및 기뢰 잠수함 어레이를 SeaObject 어레이로 결합하고 테스트
- 6개의 클래스에서 move() 이동을 재정의하고 테스트합니다.
- 그리기 창
잠수함 게임 5일차:
- 클래스의 구성원에 액세스 제어 수정자 추가
- 이미지 이미지 클래스 만들기
잠수함 게임 6일차:
- 디자인 창의 너비와 높이는 일정하므로 적절하게 수정합니다.
- 바다 지도 및 개체 그리기:
- 객체를 그리려면 객체의 그림을 가져와야 합니다.각 객체가 그림을 얻을 수 있으므로 그림
을 가져오는 동작이 일반적인 동작입니다.따라서 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() 메소드 호출
- 객체를 그리려면 객체의 그림을 가져와야 합니다.각 객체가 그림을 얻을 수 있으므로 그림
검토:
- 패키지 및 가져오기:
- 액세스 제어 수정자: ------ 데이터를 안전하게 유지
- public: public, 모든 클래스
- private: private, 이 클래스
- protected: protected, 이 클래스, 파생 클래스 및 동일한 패키지 클래스
- 기본값: 아무것도 쓰지 않음, 이 클래스, 동일한 패키지 클래스
- final: 최종,
변경할 수 없는 변수는 변경할 수 없으며 메서드를 재정의할 수 없으며 클래스를 상속할 수 없습니다. - 정적: 정적
- 정적 변수: 정적, 클래스, 메소드 영역, 하나의 사본, 모든 객체가 공유하는 데이터(그림, 오디오, 비디오)
- 정적 메서드: 정적, 클래스, 메서드 영역, 하나의 복사본, 암시적 이 전송 없음, 인스턴스 멤버에 직접 액세스할 수 없음
메서드의 작업은 개체와 관련이 없습니다. - 정적 블록: 정적, 클래스, 클래스가 로드될 때 자동으로 실행, 한 번
정적 리소스(이미지, 오디오, 비디오) 로드/초기화
메모:
-
정적 최종 상수:
- 초기화하는 동안 선언해야 함
- 액세스할 클래스 이름 포인트, 변경할 수 없습니다.
- 제안: 상수 이름의 모든 문자는 대문자로 표시되고 여러 단어는 _로 구분됩니다.
- 컴파일러는 컴파일 시간에 상수를 특정 숫자로 직접 교체하므로 효율적입니다.
- 사용 시기: 데이터는 절대 변경되지 않으며 자주 사용됩니다.
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; //编译错误,常量必须声明同时初始化 }
-
추상 방법:
- 초록에 의해 수정됨
- 메서드 정의만 있고 구체적인 구현 없음({}도 아님)
-
추상 클래스:
- 초록에 의해 수정됨
- 추상 메서드를 포함하는 클래스는 추상 클래스여야 합니다.
- 추상 클래스를 인스턴스화할 수 없습니다(새 개체).
- 추상 클래스는 상속된 파생 클래스가 필요합니다.
- 모든 추상 메서드 재정의 ------------------ 불완전 변경을 완료로 변경
- 또한 추상 클래스로 선언됨 ------------------ 일반적으로 다음과 같이 사용되지 않음
- 추상 클래스의 의미:
- 공통 속성 및 동작 캡슐화 --------------- 코드 재사용
- 모든 파생 클래스에 대한 통합 유형 제공 - 상향 스타일 지정
- 모든 파생 클래스에 대한 통합 항목을 제공하는 추상 메서드를 포함할 수 있습니다(지시 가능)
파생 클래스의 동작은 다르지만 항목은 동일하며 표준을 정의하는 것과 동일합니다(필수 재작성)
에센스 노트:
- 정적 최종 상수:
- 초기화하는 동안 선언해야 함
- 액세스할 클래스 이름 포인트, 변경할 수 없습니다.
- 제안: 상수 이름의 모든 문자는 대문자로 표시되고 여러 단어는 _로 구분됩니다.
- 컴파일러는 컴파일 시간에 상수를 특정 숫자로 직접 교체하므로 효율적입니다.
- 사용 시기: 데이터는 절대 변경되지 않으며 자주 사용됩니다.
- 추상적인 방법:
- 초록에 의해 수정됨
- 메서드 정의만 있고 구체적인 구현 없음({}도 아님)
- 추상 클래스:
- 초록에 의해 수정됨
- 추상 메서드를 포함하는 클래스는 추상 클래스여야 합니다.
- 추상 클래스를 인스턴스화할 수 없습니다(새 개체).
- 추상 클래스는 상속된 파생 클래스가 필요합니다.
- 모든 추상 메서드 재정의 ------------------ 불완전 변경을 완료로 변경
- 또한 추상 클래스로 선언됨 ------------------ 일반적으로 다음과 같이 사용되지 않음
- 추상 클래스의 의미:
- 공통 속성 및 동작 캡슐화 --------------- 코드 재사용
- 모든 파생 클래스에 대한 통합 유형 제공 - 상향 스타일 지정
- 모든 파생 클래스에 대한 통합 항목을 제공하는 추상 메서드를 포함할 수 있습니다(지시 가능)
파생 클래스의 동작은 다르지만 항목은 동일하며 표준을 정의하는 것과 동일합니다(필수 재작성)
다시 채우다:
- 디자인 규칙:
- 공통 속성 및 동작을 수퍼클래스로 추출 ----------공통성 추출
- 객체의 행위가 같으면 일반 방식으로
설계 객체의 행위가 다르면 추상 방식으로 설계 - 객체 지향 8일차
- 추상 메서드/추상 클래스에 대한 질문:
- 추상 메서드의 의미는 무엇입니까?
- 업캐스팅이 발생할 때 수퍼클래스의 참조를 통해 메소드를 호출할 수 있는지 확인하십시오.
- 그 의미는 지적할 수 밖에 없는 것이므로 일반적인 방법으로 설계해 보지 않겠습니까?
- 공통 메서드로 설계하면 파생 클래스를 재정의하거나 하지 않을 수 있으며, 파생 클래스를 강제로 재정의할 수 있는 추상 메서드로 설계되어
---------- 표준이 되었고, 강제로 재정의
- 공통 메서드로 설계하면 파생 클래스를 재정의하거나 하지 않을 수 있으며, 파생 클래스를 강제로 재정의할 수 있는 추상 메서드로 설계되어
- 추상 메서드의 의미는 무엇입니까?
- 내일 단어:
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:重新画