23強.継承と多形性(2)
16677 ワード
前回のレッスンで使用したCustomerクラスとVIPCCustomerクラスを変更して授業を行います.
public class Customer {
protected int customerID;
protected String customerName;
protected String customerGrade;
int bonusPoint;
double bonusRatio;
public Customer() {
customerGrade = "SILVER";
bonusRatio = 0.01;
}
public int calcPrice(int price) {
bonusPoint += price * bonusPoint;
return price;
}
public void showCustomerInfo() {
System.out.println(customerName + "님의 등급은 " + customerGrade + "이며, 보너스 포인트는 " + bonusPoint + "입니다.");
}
public int getCustomerID() {
return customerID;
}
public void setCustomerID(int customerID) {
this.customerID = customerID;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerGrade() {
return customerGrade;
}
public void setCustomerGrade(String customerGrade) {
this.customerGrade = customerGrade;
}
}
public class VIPCustomer extends Customer{
private int agentID;
private double saleRatio;
public VIPCustomer() {
customerGrade = "VIP";
bonusRatio = 0.05;
saleRatio = 0.1;
}
public int getAgentID() {
return agentID;
}
}
アクセス制限者の表示外部クラスサブクラス同一パッケージ内部クラスpublicOOprotectedXOOO未宣言(デフォルト)XXXXOOprivateXXXXXXXO
継承からクラスを作成するプロセス
public class Customer {
Customer(){
System.out.println("Customer() 호출");
}
}
public class VIPCustomer extends Customer{
public VIPCustomer() {
System.out.println("VIPCustomer() 호출");
}
}
main関数を含むCustomerTestクラスでVIPCCustomerオブジェクトを作成して出力し、親クラスCustomerクラスの作成者が最初に呼び出されたと判断します.public class CustomerTest {
public static void main(String[] args) {
VIPCustomer customerKim = new VIPCustomer();
}
}
Customerクラスの作成者もsuper()を自動的に呼び出します.これはjavaのトップクラスObjectクラスの作成者によって呼び出されます.
public class VIPCustomer extends Customer{
public VIPCustomer() {
super();
System.out.println("VIPCustomer() 호출");
}
}
public class Customer {
Customer(int customerID, String customerName){
this.customerID = customerID;
this.customerName = customerName;
System.out.println("Customer(int, String) 호출");
}
}
public class VIPCustomer extends Customer{
public VIPCustomer() {
super(1001, "이순신");
System.out.println("VIPCustomer() 호출");
}
public VIPCustomer(int customerID, String customerName) {
super(customerID, customerName);
System.out.println("VIPCustomer(int, String) 호출");
}
}
継承中のメモリステータスまず
超定語
親への暗黙的な変換(エスカレーション)
変数は
上記のコードでは、vcがVIPCustomer()ジェネレータを呼び出すため、インスタンスが生成されます.
ただし、タイプはCustomerなのでアクセスできる変数またはメソッドはCustomerクラスの変数とメソッドです.
Reference
この問題について(23強.継承と多形性(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@migratory_bird/Do-it-Java-Programming-23テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol