03.継承からクラス作成と変換


サブクラスの作成プロセス


  • 子クラスを作成するときは、まず親クラスを作成します.

  • new VIPCustomer()を呼び出すと、まずCustomer()が呼び出されます.

  • クラスが継承されている場合、子クラスの作成者は親クラスの作成者を呼び出す必要があります.
  • Customer.java
    public Customer() {
    		customerGrade = "SILVER";
    		bonusRatio = 0.01;
    		
    		System.out.println("Customer() 생성자 호출");
    }
    VIPCustomer.java
    public VIPCustomer() {
    		customerGrade = "VIP";
    		bonusRatio = 0.05;
    		salesRatio = 0.1;
    		
    		System.out.println("VIPCustomer() 생성자 호출");
    }

    スーパーキー


  • 子クラスの親の参照値

  • super()呼び出し親のデフォルトジェネレータ

  • サブクラスが親クラスの作成者を明示的に呼び出さない場合はsuper()を呼び出す
    (親クラスのデフォルト作成者が存在する必要があります)

  • 親にデフォルトのジェネレータがない場合(他のジェネレータがある場合)、サブクラスはsuperを使用します.
    親クラスの作成者を明示的に呼び出す

  • superには作成された親インスタンスの参照値があるため、superを使用して親クラスにアクセスする方法またはメンバー変数を使用できます.
  • Customer.java
    // 디폴트 생성자 없애고 매개 변수가 있는 생성자 추가
    public Customer(int customerID, String customerName) {
    		this.customerID = customerID;
    		this.customerName = customerName;
    		
    		customerGrade = "SILVER";
    		bonusRatio = 0.01;
    		System.out.println("Customer(int, String) 생성자 호출");
    }
    VIPCustomer.java
    // super를 이용하여 상위 클래스의 생성자 명시적으로 호출
    public VIPCustomer(int customerID, String customerName) {
    		super(customerID, customerName);
    		
    		customerGrade = "VIP";
    		bonusRatio = 0.05;
    		salesRatio = 0.1;
    		
    		System.out.println("VIPCustomer(int, String) 생성자 호출");
    }
    CustomerTest.java
    public class CustomerTest {
    
    	public static void main(String[] args) {
    		
    		Customer customerLee = new Customer(10010, "이순신");
    		customerLee.bonusPoint = 1000;
    		System.out.println(customerLee.showCustomerInfo());
    		
    		VIPCustomer customerKim = new VIPCustomer(10020, "김유신");
    		customerKim.bonusPoint = 10000;
    		System.out.println(customerKim.showCustomerInfo());
    	}
    }
  • 出力結果
  • インスタンスメモリに継承されたステータス

  • 常に親インスタンスを最初に作成し、次に子インスタンスを作成します.
  • せいけいかん


  • 変数を親として宣言し、サブクラスの作成者としてインスタンスを作成
    	Customer customerLee = new VIPCustomer();

  • 親タイプの変数に子変数を代入します.
    	VIPCustomer vCustomer = new VIPCustomer();
    	addCustomer(vCustomer);
    
    	int addCustomer(Customer customer){
  • }

  • 子クラスには親のタイプが含まれているため、親に暗黙的に変換できます.

  • 継承関係では、すべてのサブクラスが親に変換されます(アップリンク)
    (このキャラクターは成立しません)
  • 成形遷移とメモリ


  • Customer vc = new VIPCustomer(); 中vcとは?

  • VIPCustomer()ジェネレータは、VIPCustomerクラスのすべてのメンバー変数のメモリを作成しました.
    変数のタイプはCustomerなので、実際にアクセス可能な変数またはメソッドはCustomerの変数とメソッドです.


  • クラスの階層は複数のレベルです。



  • Humanは内部にPromateと哺乳類のタイプを含んでいる.
    	Primate pHumman = new Humman();
    
    	Mammal mHumman = new Humman();