Govern/Eclipse SE -상속,클래스,타입

07-21(수) 상속 오버라이딩

Mary's log 2021. 7. 21. 09:31

※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.


07Day0_Has_Relation 프로젝트 생성

ㄴCar, Engine, TestCar 클래스 생성해서 상속 맛보기


책154쪽

6장. 상속

-super 키워드 : 부모클래스 변수나 함수 표시, 초기화 유도

-오버라이딩 함수 : 부모 함수를 자식이 수정해서 사용

모든 클래스의 최상위 부모클래스는 Objects

 

07Day1 프로젝트 생성   -   Cat , Dog, Fish,      TestPet 클래스 생성

[ Cat 클래스 멤버변수 ]
private String name;
private int age;
private String gender;


[ Dog 클래스 멤버변수 ]
private String name;
private int age;
private String gender;
private String color; 
//다른 애완동물에 없는 Dog 속성
[ Fish 클래스 멤버변수 ]
private String name;
private int age;
private double tailSize; 
//Fish에만 존재하는 속성 가정

[ Cat 클래스 함수 ]
//동작  //////////////////////////
public void cryCat() {
System.out.println("cat 야옹~"); }
public void eatCat() {
System.out.println("cat 생선 먹기"); }
public void sleepCat() {
System.out.println("cat 새근새근~"); }
/////////////////////////////////////
[ Dog 클래스 함수 ]
//동작  //////////////////////////// 공통부분
public void cryDog() {
System.out.println("Dog 멍멍~"); }
public void eatDog() {
System.out.println("Dog 사료 먹기"); }
public void sleepDog() {
System.out.println("Dog 쿨쿨~"); } 
//////////////////////////////////////
//다른 애완동물에 없는 Dog함수 가정...
public void runDog() {
System.out.println("Dog 발발~"); }
[ Fish 클래스 함수 ]
//동작  ///////////////////////////// 공통부분
public void cryFish() {
System.out.println("Fish 멍멍~"); }
public void eatFish() {
System.out.println("Fish 사료 먹기"); }
public void sleepFish() {
System.out.println("Fish 쿨쿨~"); } 
//////////////////////////////////////
//다른 애완동물에 없는 Fish함수 가정...
public void swimFish() {
System.out.println("어푸어푸~"); }
[ TestPet 클래스 함수 ]
main 함수 포함 

Cat c = new Cat("야옹이", 3, "암놈");
Cat c2 = new Cat("하늘이", 1, "숫놈");
Dog d = new Dog("누렁이",8,"암놈","검정");
Fish f = new Fish("골드",1,163.3);

System.out.println(c.getName() + "\t" 
+ c.getAge() + "\t" + c.getGender());
c.eatCat();
c.cryCat();
c.sleepCat();

System.out.println(c2.getName() + "\t" 
+ c2.getAge() + "\t" + c2.getGender());
c2.eatCat();
c2.cryCat();
c2.sleepCat();

System.out.println(d.getName() + "\t" 
+ d.getAge() + "\t" 
+ d.getGender() + "\t" + d.getColor());
d.eatDog();
d.cryDog();
d.sleepDog();
d.runDog();

System.out.println(f.getName() + "\t" 
+ f.getAge() + "\t" + f.getTailSize());
f.swimFish();

 

복붙해서 07Day2프로젝트 생성  -   Pet 클래스 생성

■ Pet클래스는 아래 같이하고 + 전부 겟셋함수

 

 

 

■ 이제 Cat 자식클래스 수정해줄거임

ㄴ Cat 클래스에 extends Pet 추가하고,

ㄴPet클래스와 중복되고 있는 멤버변수 name, age 삭제

ㄴPet클래스와 중복되고 있는 (멤버변수 name, age의) 겟셋 함수 삭제

 

[ TestPet 클래스 출력 ]

 

■ 이제 Dog 자식클래스 수정해줄거임

ㄴ Dog 클래스에 extends Pet 추가하고,

ㄴPet클래스와 중복되고 있는 멤버변수 name, age 삭제

ㄴPet클래스와 중복되고 있는 (멤버변수 name, age의) 겟셋 함수 삭제

 

[ TestPet 클래스 출력 ]

ㄴ왜 위에 있냐면, c랑 d가 순차적으로 객체생성하면서부터
   Cat c로   -> Cat클래스 호출하면서 -> Pet클래스까지 호출해서 그럼. 근데
   Dog d로 -> Dog클래스 호출하면서 -> Pet클래스까지 호출해서 또 뜸.
  아래 c.eatCat( ); 함수라든가, sysout( d.getName( ) ) 가 없어도
  객체생성을 위해서, 호출 하는 순간 바로 뜨는 것.

 

■ Fish 클래스도 수정하고 출력해보기

ㄴc d f 가 순차적으로 객체생성하면서부터
   이미 생성자 호출은 순차적으로 기본으로 뜨는거임.
    함수호출이나 sysout을 해야만 뜨는게 아님.

 

 

복붙해서 07Day3프로젝트 생성   

Pet클래스, 

자식클래스들의 공통함수를 부모클래스에 구현해두기

 

[ TestPet 클래스 출력 ]

 

 

 

 

복붙해서 07Day4프로젝트 생성   

오버라이딩 : (상속관계에 있는) 부모자식에 있는 똑같은 함수를 재정의한다

-(상속관계에 있는) 부모 클래스의 함수를 자식 클래스에서 원하는대로 정의는 그대로 따라가면서, 내용 수정

 

**오버로딩 : 함수 이름이 같지만, 매개변수의 순서나 갯수가 다를때

★자식클래스명 옆에 "extends 부모클래스명" 을 꼭 적어줘야,
   오버라이딩 단축키를 썼을때, 부모클래스를 불러올 수 있음!!!!!!

ㄴcry함수가 Pet 클래스에도 있고, Cat 클래스에도 있지만,

ㄴCat클래스에 있는 cry함수가 오버라이딩 된거임


부모 클래스에 함수가 있어야하고,

자식 클래스가 그 함수를 오버라이딩할 때, ▼

 

 

ㄴ@Override 붙어있으면, 아 이 함수 부모에도 있는 함수구나 라고 알기만 하면 됨

오버라이딩 함수 추가 완료

 

 

 

[ TestPet 클래스 출력 ]

*객체생성하면서부터, 호출해온 Cat생성자 안에 있는 출력문이 출력된 것
  매개변수가 뭐든 상관없이
  [ 객체생성하고 생성자호출 시, 생성자의 내용실행] 

 

 

(예제) 만들어보기

 

 

 복붙해서 07Day7프로젝트 생성   

 

ㄴ super(sssn, name, address)는 기존에 Employee로 상속받아서 있던 변수들이고,

거기에 Manager 클래스의 멤버변수인 String depart를 추가한! 생성자인 것.

 

 


                 ┌ 중복되는 멤버변수니까 이렇게 사용가능 ┐

super(ssn, name, address);
this.depart = depart;
=
같은거임
super();
this.ssn=ssn;
this.name=name;
this.address=address;
this.depart = depart;

 08Day 프로젝트 생성   

처음부터 싹~! 만들어보기

ㄴEmployee 준비

ㄴ Engineer 출력

ㄴEmployee에 출력문 추가하고 출력하면

ㄴ굳

 

 

 

 

 

 


내가 정리한 상속쓰기..?

1) 패키지 생성->부모자식클래스 생성->일단 멤버변수 먼저 생성(&초기화) 
2) 멤버변수 다 입력하고 난 후,
    기본생성자/전체생성자/겟셋함수 단축키로 추가
3)  자식클래스에 꼭!!! "extends 부모클래스" 넣어주기
4)  부모자식클래스 간의 중복되는 멤버변수,멤버함수
     부모클래스에 몰아주고 자식클래스에서는 삭제

5)  필요에 맞춰서 함수 내용 변경 오버라이딩도 추가해주고,
6) Test클래스에서 출력