TIL(2022.02.18)
抽象クラス抽象(追加不可) 抽象クラスは、抽象メソッドおよび従来のメソッドを使用して を記述することができる.抽象メソッドは、サブクラスで実装されなければならない. ワイドビューインタフェース
1.一方的な約束2.甲乙双方の存在する承諾 javaのインタフェース
動作制約 インタフェースと抽象クラスの違い
インタフェース:動作コンストレイント
抽象クラス:未完成の設計図
package ch05;
//추상클래스는 추상메서드 와 일반메서드 모두 작성할 수 있고 추상메서드가 잇으면 자식클래스에서 추상메서드는 무조건 구현해야한다.
abstract class Animal{
abstract void speak(); //추상메서드 (몸체가 없다)
void Hello() {
System.out.println("!!!");
}
}
class Dog extends Animal{
// 오버라이드 (Animal의 speak가 무효화)
void speak() {
System.out.println("멍멍");
}
}
class Cat extends Animal{
void speak() {}
}
class Bird extends Animal{
//추상메서드를 부모가 가지고 있으면 자식은 추상메서드를 반드시 구현해야한다.
@Override
void speak() {
System.out.println("짹짹");
}
}
public class OOPEx07 {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.speak(); // 동적바인딩 된다. 왜? 부모의 메서드가 무효화 되니까
Animal a3 = new Bird();
a3.speak();
}
}
抽象クラス未完了フォーミュラpackage ch05;
abstract class 육식동물{
void 걷기(){
System.out.println("걷다");
}
//공격하는 방법은 다르기 때문에 미완성하게 작성
abstract void 공격();
}
class 뱀 extends 육식동물{
@Override
void 공격() {
System.out.println("독으로 공격");
}
}
class 사자 extends 육식동물{
@Override
void 공격() {
System.out.println("이빨로 공격");
}
}
public class OOPEx08 {
public static void main(String[] args) {
육식동물 u1 = new 뱀();
육식동물 u2 = new 사자();
u1.공격();
u1.걷기();
u2.공격();
u2.걷기();
}
}
インタフェース1.一方的な約束2.甲乙双方の存在する承諾
動作制約
インタフェース:動作コンストレイント
抽象クラス:未完成の設計図
package ch05;
interface MoveAble{ //행위의 제약
// 앞에 public abstract가 생략
void 위();
void 아래();
void 왼쪽();
void 오른쪽();
}
interface MoveAble2{ //행위의 제약
// 앞에 public abstract가 생략
void 위();
void 아래();
void 왼쪽();
void 오른쪽();
void 숨기();
}
// 인터페이스 구현이 자식 클래스로 위임될 수 있어서 강제 안됨
abstract class 사나운동물 implements MoveAble{
abstract void 공격(); // 미완성된 함수
@Override
public void 위() {
System.out.println("위로 이동");
}
@Override
public void 아래() {
System.out.println("아래로 이동");
}
@Override
public void 왼쪽() {
System.out.println("왼쪽으로 이동");
}
@Override
public void 오른쪽() {
System.out.println("오른쪽로 이동");
}
}
// 인터페이스 구현이 자식 클래스로 위임될 수 있어서 강제 안됨
abstract class 온순한동물 implements MoveAble2{
abstract void 채집(); // 미완성된 메서드
@Override
public void 위() {
System.out.println("위");
}
@Override
public void 아래() {
System.out.println("아래");
}
@Override
public void 왼쪽() {
System.out.println("왼쪽");
}
@Override
public void 오른쪽() {
System.out.println("오른쪽");
}
@Override
public void 숨기() {
System.out.println("숨기");
}
}
class 원숭이 extends 온순한동물 implements MoveAble{
@Override//어노테이션 = JVM이 실행시에 분석해서 확인 = JVM의 힌트 = JVM이 실행 시 처리
void 채집() {
System.out.println("바나나 채집");
}
}
class 소 extends 온순한동물 implements MoveAble{
@Override
void 채집() {
System.out.println("풀 채집");
}
}
class 호랑이 extends 사나운동물 implements MoveAble{
@Override
void 공격() {
System.out.println("이빨로 공격");
}
}
class 코뿔소 extends 사나운동물 implements MoveAble{
@Override
void 공격() {
System.out.println("뿔로 공격");
}
}
public class OOPEx09 {
static void 조이스틱(온순한동물 u1) {
u1.숨기();
u1.위();
u1.아래();
u1.오른쪽();
u1.왼쪽();
}
static void 조이스틱(사나운동물 u1) {
u1.위();
u1.아래();
u1.오른쪽();
u1.왼쪽();
}
public static void main(String[] args) {
소 u1 = new 소();
조이스틱(u1);
원숭이 u2 = new 원숭이();
조이스틱(u2);
호랑이 u3 = new 호랑이();
조이스틱(u3);
코뿔소 u4 = new 코뿔소();
조이스틱(u4);
}
}
Reference
この問題について(TIL(2022.02.18)), 我々は、より多くの情報をここで見つけました https://velog.io/@jisung/TIL2022.02.18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol