Javaプログラミング:オブジェクト向け(3)


継承(extends)


継承により、コードの重複が解消され、既存のクラスが容易に拡張され、プログラムの拡張性が向上します.使用形態はclass A extends B {}と同じである.BランクはAが引き継ぐ.この場合、Bは親、Aは子である.このクラスのフィールドだけでなく、このメソッドも使用できます.

選択


Upcastingとは、子を親と解釈するタイプです.例えば、Catインスタンス(オブジェクト)は、以下の継承関係がある場合にAnimalと解釈することができる.
class Animal { ... }
class Cat extends Animal { ... }
class Dog extends Animal { ... }
class Horse extends Animal { ... }
ただし、上記の内容のステーションは成立しませんので注意してください.
(猫は動物O、動物は猫X)
// 고양이 객체 생성
Cat c = new Cat();
// 고양이는 동물이다(O)
Animal a = c; // 고양이 객체를 동물로 해석 

// 동물 객체 생성
Animal aaa = new Animal();
// 동물은 고양이다(X)
Cat ccc = aaa; // ERROR!

グループ化


これらのレポートでは、親の方法でさまざまなオブジェクトを管理できます.
Animal c = new Cat();   // 고양이는 동물이다
Animal d = new Dog();   // 개는 동물이다
Animal h = new Horse(); // 말은 동물이다
// 동물 배열 - 고양이, 개, 말
Animal[] animals = { c, d, h };

オーバーライド(Override)


メソッドオーバーライドは、サブクラスで親を再定義するメソッドです.例えば、親(A)では攻撃方法ダメージが10であり、子(B)ではダメージを30に増やしたい.このとき使用する概念はメソッドオーバーライドである.次のBクラスは、親Aクラスの攻撃()メソッドを再定義します.
class A {
  public void attack() {
    System.out.println("데미지 10 !");
  }
}

class B extends A {
  // 메소드 오버라이딩(재정의)
  public void attack() {
    System.out.println("데미지 30 !");
  }
}

保護されたアクセス制御者


保護されたアクセス制御者は、継承関係のクラスにアクセスできます.次のコードのフィールド名はprotectedと宣言されており、Bで直接使用できます.
class A {
  protected String name;
}
class B extends A {
  public void printName() {
    // 부모클래스 A의 필드 name을 출력
    System.out.println(name);
  }
}

super-継承と作成者


サブオブジェクトを生成しながら初期化するには、親オブジェクトの作成者を呼び出す必要があります.このときsuperを使用します.
public class SuperTest {
  public static void main(String[] args) {
    
    User usr = new User("회원",1);
    System.out.println(usr.toString());
    
    BestUser bestUsr = new BestUser("명예회원",10,3);
    System.out.println(bestUsr.toString());
  }
}

class User {
  protected String name;
  protected int lv;
  
  public User(String name, int lv) {
    this.name = name;
    this.lv = lv;
  }
  
class BestUser extends User {
  int points;
  
  public BestUser(String name, int lv, int points) {
    super(name, lv);
    this.points = points;
  }

インタフェース


インタフェースは、メソッドセットのロール定義方法です.まず、コンテンツのないハウジングメソッドのプロトタイプメソッドを宣言し、implementsキーワードを使用してクラスにロールを付与します.インタフェースの利点は,ミラーリングが可能であり,プログラム設計の明確性が増加することである.
public class SmartPhoneTest {
  public static void main(String[] args) {
 
    SmartPhone sp = new SmartPhone();
    
    sp.ring();
  }
}

interface Alarm {
  public void beep();
}

interface Camera {
  public void shot();
}

class SmartPhone implements Alarm, Camera {
  public void beep(){
    System.out.print("띠링 띠링-!");
  }
  
  public void Camera(){
    System.out.print("찰칵-!");
  }
}

たけいせい


上記のインタフェースの例のように、携帯電話は目覚まし時計であり、カメラでもある.このようなオブジェクトが複数のタイプに解釈されるのが多形性である.SmartPhoneクラスは、以下のコードで示すこともできる.
Alarm a = new SmartPhone();
Camera c = new SmartPhone();

🙏 参考講義

  • フレン・ホンパークで食べた
    絵画で学ぶJava,Part 2:オブジェクト向け!