[22.12.28] 47일차 [백엔드] Java

W·2022년 12월 28일
0

국비

목록 보기
69/119

예제)

  • Customer 클래스
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);
		
	}
	
}
  • VIPCustomer 클래스
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

상속에서 생성자

  • 자식생성자 호출하면 부모 '기본'생성자가 자동으로 호출됨
  • 값을 받는 부모 생성자 호출 하려면 super(값); 이용

예제1)
  • person 클래스(부모)
package test;

public class Person {
	
	public Person(String name) {
    
 		// 부모클래스 Person
		// 메시지 "부모의 이름을 받는 생성자"
	System.out.println("부모의 이름을 받는 생성자");
	}
	
	public void personPrn() {
		System.out.println("Person 클래스 메서드");
	}
}
  • student1 클래스(자식)
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)

  • point2 클래스(부모)
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);
	}
}
  • Point3 클래스(자식)
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

  • Animal 클래스(부모)
package test;

public class Animal {
	// 부모클래스 Animal
	// 메서드 move() 출력 "동물이 움직인다"
	
	public void move() {
		System.out.println("동물이 움직인다");
	}
}
  • Tiger 클래스(자식)
package test;

public class Tiger extends Animal {
	// 자식클래스 Tiger 상속 Animal
	// 메서드 move() 재정의 "호랑이 네발로 움직인다"
	// 메서드 오버라이딩 부모의 move 메서드 재정의
	
	@Override
	public void move() {
		System.out.println("호랑이 네발로 움직인다");
	}
}
  • Eagle 클래스(자식)
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();
		
	}

}
[출력]
호랑이 네발로 움직인다
독수리 날개로 움직인다
  • 애노테이션 (@) Annotation
    컴파일러에게 특정한 정보를 제공해주는 역할

0개의 댓글