[IT]/java
java.Overriding(메서드 오버라이딩)
givemebro
2021. 3. 2. 11:49
반응형

Overriding(메서드 오버라이딩) : 부모 메서드를 자신에 맞게 재정의
>문법 : 접근제어자는 더 좁아지면 안 되고 리턴파입 매개변수 매서드명은 동일
> 사용자, user, client code에서는 부모클래스 또는 상위 인터페이스만 알면 세부 구현 메서드를 보지 않아도 사용이 가능
> user 편의성 증대
> 구현부가 변경되어도 소통부는 변화되지 않음으로 유지보수성 증대
// before Overriding
package step4;
class Animai {
public void sleep() {
System.out.println("자다");
}
public void eat() {
System.out.println("먹다");
}
}
class Person extends Animai {
}
public class TestOverriding1 {
public static void main(String[] args) {
Person p = new Person();
p.sleep();
p.eat();
}
}
/*
자다
먹다
*/
//Overriding
package step4;
class Animai {
public void sleep() {
System.out.println("자다");
}
public void eat() {
System.out.println("먹다");
}
}
class Person extends Animai {
// 메서드 오버라이딩 : 부모 메서드를 자신에 맞게 재정의해서 사용
// 문법 : 접근제어자는 더 좁아지면 안 되고 리턴파입 매개변수 매서드명은 동일
public void eat() {
System.out.println("사람이 숟가락을 이용해 먹다");
}
}
public class TestOverriding1 {
public static void main(String[] args) {
Person p = new Person();
p.sleep();
p.eat();
}
}
/*
자다
사람이 숟가락을 이용해 먹다
*/
예제 2
package step5;
public class Employee {
private String empNo;
private String name;
private int salary;
public Employee(String empNo, String name, int salary) {
super();
this.empNo = empNo;
this.name = name;
this.salary = salary;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getDetails() {
return "empNo: "+empNo+" name: "+name+" salary: "+salary;
}
}
package step5;
public class Engineer extends Employee {
private String skill;
public Engineer(String empNo, String name, int salary, String skill) {
super(empNo, name, salary);
this.skill = skill;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
// 메서드 오버라이딩 : 부모 메서드를 자신에 맞게 재정의
public String getDetails() {
return super.getDetails()+" skill: "+skill;
}
}
package step5;
public class Manager extends Employee {
private String department;
public Manager(String empNo, String name, int salary, String department) {
super(empNo, name, salary);
this.department = department;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public String getDetails() {
return super.getDetails()+" department: "+department;
}
}
package step5;
public class TestOverriding2 {
public static void main(String[] args) {
Employee e = new Employee("123","아이유",300);
System.out.println(e.getDetails());
Engineer en = new Engineer("124","박보검",400,"java");
System.out.println(en.getDetails());
Manager m = new Manager("125","이효리",500,"영업부");
System.out.println(m.getDetails());
}
}
/*
empNo: 123 name: 아이유 salary: 300
empNo: 124 name: 박보검 salary: 400 skill: java
empNo: 125 name: 이효리 salary: 500 department: 영업부
*/
반응형