9. 상속개요 및 오버라이딩,생성자와의 관계,super
=> 상속 -> Employee —Manager—-Company
전에 작업한 클래스의 상당한 부분을 중복코딩 -> copy
A 2000줄 ——-> B -> 1300copy + 700
특징
재사용성이 높고, 코딩양이 줄어듬 => 개발시간 단축
※상속 => 부모(재산)
=> 멤버변수, 메서드
=> 회원가입, 로그인, 방명록, 게시판 => 기능구현
================================
class Manager(p) extends Employee(q)
=> 논리적으로 is a 관계가 형성
팀장은 그 회사의 직원이다.(참)
직원은 그 회사의 팀장이다.(거짓)
class 대학생(특수한경우) extends 학생(일반적인개념)
class 개발자 extends 직원
p->q이다(참)
q->p이다(거짓인 관계)
====================================
상속이 안되는 경우 -> private접근지정자를 가진 멤버변수, 메서드,
생성자(접근권한자와 상관없이 상속이 안된다)
class 자식클래스 extends 부모클래스1, 부모클래스2…(X)
=> 프로그램의 복잡성, 자바는 단일 상속만 지원한다
※ 메서드 오버라이딩(Overrriding)
-> 자식클래스입장에서 부모로부터 물려받은 메서드의 내용이 안맞아서 자식클래스의 스타일로 내용을 수정하는 기법
Ex) 파일 덮어쓰기
● 상속과 생성자의 관계
1. 생성자는 상속불가
2. 상속관계에서 자식클래스의 객체를 생성-> 먼저 부모클래스의 생성자를 호출 -> 자식클래스의 생성자를 호출
3. p.176 (Object 클래스)
-> 자바에서는 클래스를 작성-> 무조건 -> java.lang.Object를 상속받게 되어있다.
Ex) InheriTest.java(상속과 생성자의 관계)
실행결과)
난 Father생성자호출
f = j224.Father@1db9742
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
->클래스이름을 구해옴@시스템의 주소값을 16진수형태로
난 Father생성자호출
난 Child생성자호출
c = j224.Child@106d69c
● this vs super
this(현재 생성된 객체를 가리키는 예약어)
자신클래스의 객체를 가리키는 예약어(상속관계일때)
<-> super(부모 객체를 가리키는 예약어)
Ex) SuperTest2.java(super사용)
● this() vs super()
this()->자식클래스의 기본 생성자를 호출
this(1)-> 자식클래스의 인수1개짜리 호출
<-> super()->부모클래스의 기본생성자를 호출(없으면 자동으로 생성해서 호출)
예외) 생성자 오버로딩인 경우
super(1)->부모클래스의 인수 1개 정수형 생성자호출
super(“홍길동”)->부모클래스의 인수 1개 문자형 생성자호출
super(1, “이길수”)-> 인수 2개 정수형, 문자형호출
=> 인수가 있는경우는 반드시 선언해줘야 된다.
Ex) SuperTest.java(생성자호출)
최종 package j224
Ex)Employee.java
Ex) Manager Class(Company.java 포함됨)
Ex) Company.java(super(),생성자까지 포함)
-> 올바른 값만 저장 -> 조회=> 접근지정자
● 접근지정자
private->default->protected->public
Ex) A(int i).java,B.java-> B클래스에서 A클래스로 접근할 수가 있는가?
Ex) A.java(접근지정자-private,(defalut))
Ex) B.java(접근지정자-private,(defalut))
=====>접근하고자 하는 클래스의 객체를 생성해서->객체명.멤버변수=값;
객체명.일반메서드명(~);
◊ private
-> 자기 클래스 내부에서만 접근이 가능
자기패키지내부, 외부패키지에서는 접근불가
이클립스에서 외부의 클래스에 접근하고자할때
1. ~not visible
2. A cannot be resolved to a type->A class가 어디에 있는지 위치를 모르는경우
-> import구문을 사용할것.
◊ (default)
=>(package)권한
=>같은 클래스 내부에서 접근가능
=>같은 패키지 내부에서 접근가능
Ex) C.java(외부 패키지)

외부 패키지에서는 접근불가(상속과 상관없이)
과제)
조건1 ==> OpTest.java로 저장할것.
실행결과 ==> Scanner -> 숫자(nextInt()),문자(next()), 문자열(nextLine())
첫번째 숫자를 입력?6
두번째 숫자를 입력?7
연산자를 선택?(+,-,*,/)+
실행결과 13
Ex)OpTest.java(직접구현해봄)
다음시간
=>protected권한, public권한(6장)=>5장. static + 멤버변수, final=>7장. 추상클래스?->p187특징=>인터페이스?->p189