super, this
ex) public CoffeeValue(String coffeeName, int capacity)
{
coffeeName = coffeeName;
capacity = capacity;
}
클래스 속성인 coffeeName 변수는 생성자의 실행부 밖에 선언되어 있으므로 자바 컴파일러는 coffeeName = coffeeName 구문을 매개변수에 다시 매개변수의 값을 대입하는 것으로 인식한다.
그러므로 분석하기 쉽지 않다. 앞서 코딩한 CoffeValue 클래스의 생성자를 위와 같이 변경하고 다시 실행해보면 CoffeeValue 클래스의 속성인 capacity와 coffeeValue 변수는 아무런 값도 대입되지 않기 때문에 실행 결과 capacity는 기본값인 0을, coffeeValue는 null값을 출력하게 된다.
명시적으로 변수 이름이 어떤 변수를 의미하는지 구별하기 위해서 this 키워드를 활용해보자.
public CoffeeValue(String coffeeName, int capacity)
{
this.coffeeName = coffeeName;
this.capacity = capacity;
}
- 'this = 자신이 속한 객체' 를 의미
* this 키워드는 인스턴스화된 자기 자신의 객체를 지칭한다.
* super 키워드는 인스턴스화된 부모 객체를 지칭한다.
* this와 super 키워드는 클래스의 메소드나 클래스 변수와 결합해서 사용한다.
package com.gilbut.chapter6;
public class CoffeeValue {
protected int capacity;
protected String coffeeName;
public CoffeeValue(String coffeeName, int capacity){
this.capacity = capacity;
this.coffeeName = coffeeName;
}
public String getInfo() {
return "Capacityzz : " + capacity + "ml , " + "CpffeeName : " + coffeeName;
}
}
package com.gilbut.chapter6;
public class CoffeeLatteValue extends CoffeeValue{
protected int capacityMilk;
public CoffeeLatteValue(String coffeeName, int capacityTotal, int capacityMilk){
super(coffeeName, capacityTotal);
this.capacityMilk = capacityMilk;
}
public String getInfo(){
return "Milk Capacityss: " + (this.capacityMilk) + "ml";
}
public String getDescription(){
String rt = super.getInfo();
rt += this.getInfo();
return rt;
}
public static void main(String[] args) {
CoffeeLatteValue order1 = new CoffeeLatteValue("Cafe Latte", 500, 100);
System.out.println(order1.getInfo());
}
}