예제)
package test;
public class Customer {
// 고객(Customer) 클래스
// int id, String name, String grade
// int point, double ratio
// => 기본 생성자 초기값 grade="silver", ratio=0.01
// => clacPrice 메서드(int price)
// point+=(price*ratio)
// => show() 메서드
// name 님의 등급 grade, 포인트 point 출력
protected int id;
protected String name;
protected String grade;
protected int point;
protected double ratio;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public int getPoint() {
return point;
}
public void setPoint(int point) {
this.point = point;
}
public double getRatio() {
return ratio;
}
public void setRatio(double ratio) {
this.ratio = ratio;
}
public Customer() {
grade = "silver";
ratio = 0.01;
}
public int calcPrice(int price) {
point+=(price*ratio); // 포인트 증가
return price; // 가격 그대로 리턴
}
public void show() {
System.out.println(name+"님 등급 "+grade+", 포인트 "+point);
}
}
package test;
public class VIPCustomer extends Customer {
// VIPCustomer 클래스 상속 Customer
// => 멤버변수 int agentID, double saleRatio
// => 기본생성자 초기값 grade="VIP", ratio=0.05
// saleRatio = 0.1
// => clacPrice 메서드(int price)
// point = point + (price * ratio)
// return price - (int)(price*saleRatio)
// set, get 메서드 정의
private int agentID;
private double saleRatio;
public int getAgentID() {
return agentID;
}
public void setAgentID(int agentID) {
this.agentID = agentID;
}
public double getSaleRatio() {
return saleRatio;
}
public void setSaleRatio(double saleRatio) {
this.saleRatio = saleRatio;
}
public VIPCustomer() {
grade="VIP"; // private인 경우 setGrade("VIP");
ratio=0.05; // private인 경우 setRatio(0.05);
saleRatio=0.1;
}
public int calcPrice(int price) {
point+=(price*ratio);
// private인 경우 setPoint(getPoint()+(int)(price*getRatio()));
return price - (int)(price*saleRatio);
}
}
package test;
public class Test1 {
public static void main(String[] args) {
// Customer 객체생성
// 이름 : 이순신, 아이디 10010, 포인트 1000점 값 저장
// show() 호출
// VIPCustomer 객체생성
// 이름 : 김유신, 아이디 10020, 포인트 10000점 값 저장
// show() 호출
Customer c = new Customer();
c.setId(10010);
c.setName("이순신");
c.setPoint(1000);
c.show();
// 상품구매
c.calcPrice(3000);
c.show();
VIPCustomer vc = new VIPCustomer();
vc.setId(10020);
vc.setName("김유신");
vc.setPoint(10000);
vc.show();
vc.calcPrice(3000);
vc.show();
}
}
[출력]
이순신님 등급 silver, 포인트 1000
이순신님 등급 silver, 포인트 1030
김유신님 등급 VIP, 포인트 10000
김유신님 등급 VIP, 포인트 10150
package test;
public class Person {
public Person(String name) {
// 부모클래스 Person
// 메시지 "부모의 이름을 받는 생성자"
System.out.println("부모의 이름을 받는 생성자");
}
public void personPrn() {
System.out.println("Person 클래스 메서드");
}
}
package test;
public class Student1 extends Person {
public Student1() {
super("홍길동"); // 부모 값을 받는 생성자 호출
}
public void prn(){
// 부모의 멤버변수, 메서드 호출
super.personPrn();
System.out.println("Student1 클래스 메서드");
}
}
package test;
public class Test3 {
public static void main(String[] args) {
// Student1 객체생성
// 메서드 호출
Student1 s1 = new Student1();
s1.prn();
s1.personPrn(); // 부모 메서드
}
}
[출력]
부모의 이름을 받는 생성자
Person 클래스 메서드
Student1 클래스 메서드
Person 클래스 메서드
예제2)
package test;
public class Point2 {
protected int x; // protected로 설정하면 상속 관계도 접근 가능
protected int y;
// 생성자 x,y를 받는 생성자
public Point2(int x, int y) {
System.out.println("x,y를 받는 생성자");
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void prn2() {
System.out.println(x);
System.out.println(y);
}
}
package test;
public class Point3 extends Point2 {
private int z;
public Point3(int x, int y, int z) {
super(x,y);
System.out.println("x,y,z를 받는 생성자");
this.z=z;
}
public int getZ() {
return z;
}
public void setZ(int z) {
this.z = z;
}
public void prn3() {
// 부모의 prn2()메서드 호출
super.prn2();
System.out.println(x +", "+ y+", "+z);
}
}
package test;
public class Test4 {
public static void main(String[] args) {
// Point3 객체 생성
// prn3() 메서드 호출
Point3 p3 = new Point3(1,2,3);
p3.prn3();
}
}
[출력]
x,y를 받는 생성자
x,y,z를 받는 생성자
1
2
1, 2, 3
상속관계에서 부모의 메서드를 재정의(수정)해서 사용
메서드 오버라이딩[단축키] alt shift s -> v
package test;
public class Animal {
// 부모클래스 Animal
// 메서드 move() 출력 "동물이 움직인다"
public void move() {
System.out.println("동물이 움직인다");
}
}
package test;
public class Tiger extends Animal {
// 자식클래스 Tiger 상속 Animal
// 메서드 move() 재정의 "호랑이 네발로 움직인다"
// 메서드 오버라이딩 부모의 move 메서드 재정의
@Override
public void move() {
System.out.println("호랑이 네발로 움직인다");
}
}
package test;
public class Eagle extends Animal {
// 자식클래스 Eagle 상속 Animal
// 메서드 move() 재정의 "독수리 날개로 움직인다"
@Override
public void move() {
System.out.println("독수리 날개로 움직인다");
}
}
package test;
public class Test5 {
public static void main(String[] args) {
// Tiger 객체생성
// move() 메서드 호출
Tiger t = new Tiger();
t.move();
// Eagle 객체생성
// move() 메서드 호출
Eagle e = new Eagle();
e.move();
}
}
[출력]
호랑이 네발로 움직인다
독수리 날개로 움직인다