무룩 공부방

[Java02] 23. 오버라이딩(Overriding) (Eclipse) 본문

IT/Java02_Intermediate

[Java02] 23. 오버라이딩(Overriding) (Eclipse)

moo_look 2023. 10. 7. 20:29

# 오버라이딩(Overriding)

  • 슈퍼 클래스의 메서드를 서브 클래스에서 재정의
  • 조상 클래스로 부터 상속받은 메서드의 내용을 변경하는 것
  • 슈퍼 클래스 메서드의 이름, 매개 변수 타입 및 개수, 리턴 타입을 동일하게 재작성 한다
  • 선언부가 서로 일치 해야 한다

package java02_intermediate;

class OldPerson { 
	
	protected String 	name;
	protected int 		age;
	protected String 	address;
	
	public void displayPerson() {
		System.out.printf("name : %s\t age : %d\t address %s\n", name, age, address);
	}
}

class OldStudent extends OldPerson {
	
	protected int 		number; 	
	protected String 	memClass; 	
	protected String 	subject;	
	protected String 	grade; 		
	
	@Override 
	public void displayPerson() {
		// TODO Auto-generated method stub
		System.out.printf("name : %s\t age : %d\t address %s\n", name, age, address);
		System.out.printf("number : %d\tmemClass : %s\tsubject : %s\tgrade : %s\n", number, memClass, subject, grade);
	}
}

class Person {
	
	protected String name;
	protected int age;
	
	protected Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void printInfo() {
		System.out.println("<개인>");
		System.out.printf("name : %s\n", name);
		System.out.printf("age : %d\n", age);
		System.out.println();
	}
}

class Professor extends Person {
	
	private String major;
	
	public Professor(String name, int age, String major) {
		super(name, age); 
		this.major = major;
	}
	
	public void printInfo() {
		System.out.println("<교수>");
		System.out.printf("name : %s\n", name);
		System.out.printf("age : %d\n", age);
		System.out.printf("major : %s\n", major);
		System.out.println();
	}
}

class JslStudent extends Person {
	private String majorClass;
	private String grade;
	
	public JslStudent(String name, String majorClass, String grade, int age) {
		super(name, age);
		this.majorClass = majorClass;
		this.grade = grade;
	}
	
	public void printInfo() {
		System.out.println("<학생>");
		System.out.printf("name : %s\n", name);
		System.out.printf("age : %d\n", age);
		System.out.printf("majorClass : %s\n", majorClass);
		System.out.printf("grade : %s\n", grade);
		System.out.println();
	}
}

class Shape { 
	public Shape next; 
	
	public Shape() { 
		next = null;
	}
	
	public void draw() { 
		System.out.println("Shape");
	}
}

class Line extends Shape {
	@Override
	public void draw() { 
		System.out.println("Line");
	}
}

class Rect extends Shape {
	@Override
	public void draw() {
		System.out.println("Rectangle");
	}
}

class Circle extends Shape {
	@Override
	public void draw() {
		System.out.println("Circle");
	}
}

class ShapeTwo {
	
	protected String name;
	public void printSt() {
		draw();
	}
	public void draw() {
		System.out.println("shape");
	}
}

class Triangle extends ShapeTwo {
	@Override
	public void draw() {
		System.out.println("Dynamic Binding Draw()...");
	}
}

public class Java23_Overriding {
	
	static void paint(Shape s) { 
		s.draw();
	}
	
	public static void main(String[] args) {
		
		OldPerson person = new OldPerson();
		person.name = "홍길동 엄마";
		person.age = 530;
		person.address = "지리산 산적골";
		person.displayPerson(); // 조상의 메서드
		
		OldStudent student = new OldStudent();
		student.name = "아들 길동이";
		student.age = 500;
		student.address = "대전시";
		student.number = 20231004;
		student.memClass = "마술학과";
		student.subject = "변신술";
		student.grade = "A+";
		student.displayPerson(); 
		
		Person Person2 = new Person("이순신", 100);
		Professor professor = new Professor("강사", 200, "it");
		JslStudent JslStudent = new JslStudent("소연이", "it", "web", 23);
		 
		Person2.printInfo();
		professor.printInfo();
		JslStudent.printInfo();
		
        
		Line line = new Line();
		paint(line);
		
		Rect rect = new Rect();
		paint(rect);
		
		Circle circle = new Circle();
		paint(circle);
		
		
		ShapeTwo st1 = new ShapeTwo();
		st1.printSt(); // ShapeTwo
 		st1.draw(); // ShapeTwo
		
		ShapeTwo st2 = new Triangle();
	
		st2.printSt(); // Dynamic
		st2.draw(); // Dynamic
		
	}

}