자손타입의 참조변수를 사용했을 때는 자손클래스에 선언된 멤버변수가 사용된다.
중복정의 되지 않았을 경우, 각 타입의 참조변수를 사용했을 때의 차이는 없다.
닫기
public class BindingTest { public static void main(String[] args) { Parent p = new Child(); //각기 타입은 다르지만 같은 인스턴스를 참조한다. Child c = new Child(); System.out.println("p.x = " + p.x); //멤버변수는 참조변수의 타입에 따라 달라진다. p.method(); System.out.println("c.x = " + c.x); c.method(); } }
class Parent { int x = 100; void method() { System.out.println("Parent Method"); } }
//상속
class Child extends Parent { int x = 200; void method() { System.out.println("Child method"); } }
//결과
p.x = 100 Child method c.x = 200 Child method
닫기
자손클래스에 선언된 멤버변수와 조상클래스로부터 상속받은 멤버변수를 구분하는데 super와 this를 쓴다.
닫기
public class BindingTest3 { public static void main(String[] args) { Parent3 p = new Child3(); //각 타입은 다르지만 둘다 자손 클래스로 생성되었다. Child3 c = new Child3(); System.out.println("p.x = " + p.x); //멤버변수는 타입에 따라 다르다. p.method(); System.out.println("c.x = " + c.x); c.method(); } }
class Parent3 { int x = 100; void method() { System.out.println("Parent Method"); } }
class Child3 extends Parent3 { int x = 200; void method() { System.out.println("x= " + x); System.out.println("super.x= " + super.x); System.out.println("this.x= " + this.x + "\n"); } }
//결과
p.x = 100 x= 200 super.x= 100 //부모클래스의 멤버변수 this.x= 200
c.x = 200 x= 200 super.x= 100 this.x= 200
닫기
닫기
class Product { int price; int bonusPoint; Product(int price) { this.price = price; bonusPoint = (int)(price/10.0); } }
class Tv extends Product { Tv() { super(100); //부모클래스의 생산자를 호출한다. Tv의 가격은 100 } public String toString() { //Obect클래스 메서드 return "Tv"; //문자열을 얻어 다음 문자열을 출력 } }
class Computer extends Product { Computer() { super(200); } public String toString() { return "Computer"; } }
class Buyer { int money = 1000; int bonusPoint = 0; void buy(Product p) { if(money < p.price) { System.out.println("잔액이 부족합니다."); return; } money -= p.price; bonusPoint += p.bonusPoint; System.out.println(p + "을/를 구입하셨습니다."); } }
public class PolyArgumentTest { public static void main(String[] args) { Buyer b = new Buyer(); Tv tv = new Tv(); Computer com = new Computer(); b.buy(tv); b.buy(com); System.out.println("현재 남은 돈은 " + b.money + "만원입니다."); System.out.println("현재 보너스점수는 " + b.bonusPoint + "점 입니다."); } }
닫기