오늘의 과정 목록
-객체지향 프로그래밍의 특성, 상속, 캡슐화, 추상화, 다형성
(상속, 오버라이딩)
객체지향 프로그래밍의 특성, 상속, 캡슐화, 추상화, 다형성
객체지향 프로그래밍의 특성, 상속, 캡슐화, 추상화, 다형성은 코드의 재사용성을 높이고 모듈화가 가능하게 만들고 유지보수를 수월하게 한다.
상속
일반 클래스 예문
Class Teacher {
String name;
int age;
String address;
String school;
int gradeClass;
void eat(String food) {
System.out.println(food + "을/를 먹는다.");
}
void teaching() {
System.out.println(gradeClass + "에서 밥을 먹습니다.")
}
}
class Police {
String name;
int age;
String address;
String position;
String area;
void eat(String food) {
System.out.println(food + "을/를 먹는다.");
}
void patrol() {
System.out.println(area + "을/를 순찰합니다.");
}
}
public class Inheritance {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.name = "선생님1";
teacher.school = "한국고등학교";
System.out.println(teacher.name);
}
}
/*
출력 결과)
선생님1
*/
상속
클래스 Teacher와 클래스Police의 공통 인스턴스를 상속할 부모 클래스 Human을 만들어 상속 받기
class Human {
String name;
int age;
String address;
void eat() {
System.out.println("음식을 먹는다.");
}
}
class Teacher extends Human {
String school;
int gradeClass;
void eat() {
System.out.println(school + "에서 밥을 먹습니다.");
}
void eat(String food) {
System.out.println(school + "에서 " + food + "을/를 먹습니다.");
}
}
public class Inheritance {
public static void main(String[] args) {
Teacher teacher = new Teacher();
Human human = new Human();
teacher.name = "선생님1";
teacher.school = "한국고등학교";
System.out.println(teacher.name);
human.eat();
teacher.eat();
teacher.eat("밥");
}
}
/*
출력 결과)
선생님1
음식을 먹는다.
한국고등학교에서 밥을 먹습니다.
한국고등학교에서 밥을/를 먹습니다.
*/
단일상속
super / super()
class Human {
String name;
int age;
String address;
Human(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
void eat() {
System.out.println(name + "선생님은" + "음식을 먹는다.");
}
}
class Teacher extends Human {
String school;
int gradeClass;
Teacher(String name, int age, String address, String school, int gradeClass) {
super(name, age, address);
this.school = school;
this.gradeClass = gradeClass;
}
void teaching() {
System.out.println(gradeClass + "반에서 수업을 한다.");
}
void eat() {
System.out.println(school + "에서 밥을 먹습니다.");
}
void eat(String food) {
System.out.println(school + "에서 " + food + "을/를 먹습니다.");
}
}
public class Inheritance {
public static void main(String[] args) {
Teacher teacher = new Teacher("김철수", 50, "사회", "한국중학교", 1);
Human human = new Human("김영희", 30, "수학");
System.out.println(teacher.name);
human.eat();
teacher.teaching();
teacher.eat();
teacher.eat("밥");
}
}
/*
출력 결과)
김철수
김영희선생님은음식을 먹는다.
1에서 수업을 한다.
한국중학교에서 밥을 먹습니다.
한국중학교에서 밥을/를 먹습니다.
*/
오버라이딩
오버라이딩 규칙
@Override 어노텡션
오버라이딩의 장점
오버로드와 오버라이딩
오버로드 : 같은 이름의 메소드를 여러개 만드는 것.
오버라이딩 : 부모 클래스에 있는 메서드를 재정의 하는 것.
class Human {
String name;
int age;
String address;
void eat() {
System.out.println("음식을 먹는다.");
}
}
class Police extends Human{
String position;
String area;
// 오버라이딩
@Override
void eat() {
System.out.println(name + " 경찰관은" + " 음식을 먹는다.");
}
// 오버로드
void eat(String food) {
System.out.println(food + "을/를 먹는다.");
}
}
public class Inheritance {
public static void main(String[] args) {
Police police = new Police();
police.name = "이훈이";
police.area = "떡잎마을";
System.out.println(police.name);
System.out.println(police.area);
police.eat();
police.eat("밥");
}
}
/*
출력 결과)
이훈이
떡잎마을
이훈이 경찰관은 음식을 먹는다.
밥을/를 먹는다.
*/