본문 바로가기

JAVA

#30 [JAVA] 전역 상수(static final), 접근제한자 종류, 패키지, 상속 super 예약어, 오버라이딩

sec05 - exam06
전역 상수 : static final : 이름을 대문자로 만듬
* final : 상수 : 1개의 값을 저장하는 곳, 수정 불가 ( <-> 변수)
Earth

EarthApplication

 


변수의 범위

 


sec06 - exam01
접근제한자, Getter / Setter

Car

CarApplication

 

sec06 - exam02 : 패키지(폴더) 이론


chap07 : 클래스 고급
sec01 - exam01 : 상속

CellPhone : 부모클래스 (일반적이고 더 범위가 넓음)

DmbCellPhone : 자식클래스

 

1. 뒤에 extends CellPhone 작성

 

2. alt + insert 로 생성자 자동완성하고 model, color 직접 추가

부모쪽에 생성자가 없어서 직접 추가

생성자를 만드는지 안만드는지는 개발자 임의

 

CellApplication : 실행클래스 : 자식클래스 이름으로 클래스 생성

 

dmbCellPhone에는 int channel 처럼 channel 속성밖에 없으나 model, color이 출력이 됨

extends CellPhone : CellPhone이라는 클래스의 3요소를 DmbCellPhone이 모두 물려받음

 

중복된것들을 제거하는게 코딩의 효율화

부모, 자식에 다 작성하는게 아니라 상속하면 중복된것 제거


sec01 - exam02 : 상속 : super 예약어

People : 부모클래스

Student : 자식클래스

 

1. extends People 작성

 

2. alt + insert 하면 저절로 3개짜리가 만들어짐

부모쪽에 생성자가 있어서 저절로 생성이 됨

부모쪽에 생성자가 없으면 exam01 처럼

super 사용안하고 this.name = name;  this.ssn = ssn; 처럼 직접 추가

 

부모쪽 생성자 먼저 호출 자식쪽 생성자 호출 ★

부모, 자식 바뀌면 에러

StudentApplication : 실행클래스 : 자식클래스 이름으로 클래스 생성

 


sec01 - exam03 : 상속 : 오버라이딩(overriding) : 재정의

Calculator : 부모클래스

 

Computer : 자식클래스

ComputerApplicaton : 실행클래스

 

areaCircle : 부모, 자식 이름이 똑같음

extends Calculator : 부모 클래스의 함수들을 사용할 수 있다

areaCircle 실행했을 때 어떤 함수가 실행이 되느냐

-> 자식 클래스에서 실행하면, 자식 클래스에 있는 함수가 우선적으로 실행됨

    부모 돈보다 자기자신 돈을 더 먼저 씀...(?)ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

언제 사용하느냐?

부모에 있는 함수와, 자식에 있는 함수가 동일하면 자식함수가 우선적이다.

 

Calculator 는 부모함수에 있음

Computer는 부모함수로부터 상속받았기 때문에, 부모함수의 areaCircle과 자식함수의 areaCircle 둘다를 사용할 수 있는데 이럴 경우에는 자식함수가 부모함수보다 더 먼저 쓰인다!!! = 오버라이딩

sec01 - exam04
AirPlane : 부모클래스

SuperAirPlane : 자식클래스

 

 

부모에 있는 fly 함수가 시원찮아서

자식에서 if 문으로 fly 함수를 다시 정의함

 

AirPlaneApplication

 

여기서 fly()는 일반 비행하다가

밑에서 초음속으로 비행으로 바꿈

sec01 - verify - exam01 : 상속 문제 : 부모클래스를 완성하라
Person : 부모클래스

Student : 자식클래스

 

1. 자식쪽에 속성이 적혀있어야 사용가능한데 아무것도 없는데 사용중이다 = 부모쪽의 속성이구나

2. age, name, height 에는 ( )가 없다 = 속성이다

3. setWeight에는 ( )가 있다 = 함수다

4. setWeight 는 Setter함수임. set + 속성명 형태! 

    여기서 set을 제외한 Weight가 속성명이며, 속성명은 관례적으로 소문자로 작성

5. age, height, setWeight 는 숫자인걸보니 정수, name은 문자열

 

 

StudentApplication : 실행클래스

sec01 - verify - exam02 : 상속 문제

 

public 이나 private 붙이는건 같은 패키지에서 쓰냐 안쓰냐의 문제라서 안써도 상관없음!

Point : 부모클래스 : 완성시키기

 

x, y 속성 만들기

showPoint( ) 함수는 직접 만들기

ColorPoint : 자식클래스

 

showPoint( ) : ( ) 가 있어서 함수네!라는걸 알기

근데 자식쪽에는 그런 함수가 없기때문에, 부모에서 왔구나를 알기

 

color는 자식에도 속성이 있으니 부모에는 필요없음

PointApplication : 실행클래스

 

setX, setY, setColor 은 Setter함수의 형태

showColorPoint( ) 는 함수 형태

 

부모쪽에 속성이 x,y 가 있구나

x의 값에 3,  y의 값에 4 넣음

verify - exam03 : 생성자
Point

 

public 써도 되고 안써도 된다 : 다른 클래스에서도 사용 가능하다(Point 와 PointApplication은 서로 다른 클래스이다)

생략하면 default : 같은 폴더안에 있는것들은 다 갖다써도 된다는 뜻

 

 

PointApplication

 

Point( ) : 매개변수 없는 기본 생성자

Point( 10, 20 ) : 매개변수 있는 생성자

=> 생성자 2개 만들어야 함

 

verify - exam04 : 함수 만들기
Computer

ComputerApplication

 

1. turnOn( ) 등등이 괄호로 되어있으니 함수형태이다 : 함수는 -> 동작, 형태를 나타냄

2. 그리고 int result = computer.turuOn( ) { } 같이 안생겼기 때문에 return 값이 없는 함수다

3. 그 함수를 실행하면 "전원을 켭니다." 가 나오니 함수의 값에는 println에 "전원을 켭니다."를 적으면 됨

verify - exam05 : getter / setter 
Pengiun

PengiunApplication

 

1. set, get 뒤에 나오는게 속성명

2. set 함수의 자료형은  "뽀로로", "남극"을 보아하니 문자열이다.

verify - exam06 : 상속 문제 : Student 자식 클래스를 완성하라

 

Person : 부모클래스

Student : 자식클래스

 

1. Person 에서 상속부터 받자 : extends Person

2. getName, getId를 보니 속성이름은 name, id 이다.

부모에 name은 있는데 id가 없으니 자식 클래스에 id라는 속성을 만들면 된다.

3. 자식에 setter / getter 를 만들자

4. "홍길동"만 해결하자 = 생성자

부모쪽에는 기본 생성자와 매개변수 1개짜리 생성자도 있음

자식쪽에는 아무것도 없음. Student student = new Student("홍길동") 에서 student는 자식클래스라서

자식쪽에 생성자 하나 만들기

name 만 생성자 하나 만들기 - id도 생성자 만들래? 하는건 '선택 안 함' 선택

StudentApplication


<상속>

 

1. 상속 : 부모 클래스의 속성과 함수를 자식 클래스에서 사용할 수 있도록 함

 

2. 함수(메소드) 재정의 : 부모 함수를 자식 클래스에서 다시 정의하는 것

 

3. final 클래스 : final 키워드로 선언된 클래스는 부모 클래스를 사용할 수 없음

 

4. final 함수 : final 키워드로 선언된 함수는 재정의(오버라이딩) 할 수 없음