6월 2일 복습하기
1.오버라이딩
상속받은 조상의 메서드를 자신에 맞게 변경하는것
자식객체의 오버라이딩이 먼저 우선권을 갖는다.
2.toString()
Object클래스의 메서드 인데, 자신에게 맞게 바꿀수 있다.
왜? 부모클래스를 상속 받지 않으면 자동적으로 최고조상을 상속받게 되는데 그안에 있는 toString()메서드로 오버라이딩이 가능하기때문
메인메서드에서 변수명.toString()으로 호출해도되지만,
변수명만 으로도 호출이가능하다.
예)a.toString(); 또는 a 로 호출
3.오버라이딩 조건
(1)선언부가 조상 클래스의 메서드와 일치 해야 한다.
선언부는 반환타입,메서드이름,매개변수목록 이 모든게 일치해야함.
(2)접근제어자가 조상메서드보다 좁은 범위로 변경할수 없다.
public>protected>defalt>private
(3)예외는 조상 클래스의 메서드보다 많이 선언할수 없다.
4.오버로딩vs 오버라이딩
오버로딩:기존에 없는 새로운 메서드를 정의 하는것(new)
오버라이딩:상속받은 메서드의 내용을 변경 하는것(change,modify)
5.참조변수 super.변수명
객체 자신을 가르키는 참조변수.
인스턴스 메서드(생성자)내에만 존재.
static메서드내에서는 사용불가.
조상의 멤버와 자신의 멤버를 구별할 때 사용
6.조상의 생성자super()
조상의 생성자를 호출할 때 사용
조상의 멤버는 조상의 생성자가 직접 초기화 해준다.
생성자의 첫 줄에 반드시 생성자를 호출해야한다.
그렇지 않으면 컴파일러가 생성자의 첫줄에 조상의 기본생성자인 'super();'를 자동삽입
만약 첫줄에 생성자 호출이 없다면 super();자동 삽입이 되는데,
조상에 기본생성자 없이 매개변수있는 생성자만 있다면,
에러가 난다.
7.패키지
서로 관련된 클래스를 묶어놓은것
패키지는 폴더의 개념
클래스의 실제이름은 패키지를 포함한다.
예)java.lang.String
8.패키지의 선언
패키지는 소스파일의 첫 번째 문장으로 단 한번 선언한다!
같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.
패키지의 선언이 없으면 이름이 없는 default패키지에 속하게 된다.
bin은 패키지의 루트(패키지시작의 상위폴더)
컴터는 많을 파일을 가지고 있기 때문에 이름만으로 파일을 찾아줄수 없기 때문에 class파일을 찾을때는 bin(패키지 루트)까지는 가야한다.
매번 bin까지 경로를 쳐줘야하니까 이런 불편함을 해소하기 위해서
클래스패스를 설정
클래스파일의 위치를 알려주는 경로를 설정
os에서 관리하는 환경변수에 설정해주면 클래스이름(패키지가 있는 실제이름)만으로 찾을수 있음
9.import문
다른 패키지의 class를 쓰고싶을때 import문 사용
import문은 컴파일러에게 클래스가 속한 패키지를 알려준다.
클래스를 사용할 때 패키지의이름을 생략할 수 있다.
java.lang패키지의 클래스는 import하지 않고도 사용 할 수 있다.
10.static import문
static 멤버를 사용할때 클래스 이름을 생략할수 있게 해준다.
11.제어자
클래스와 클래스의 멤버(멤버변수,메서드)에 부가적인 의미 부여
(1)접근제어자(public>protected>defalt>private)
(2)그외(static,final,abstract..)
static 멤버변수->모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
static 메서드->인스턴스를 생성하지 않고도 호출이 가능한 메서드
인스턴스멤버들을 사용할수 없다!!!
final 마지막의,변경될수 없는 모든 멤버들 사용가능
final class->마지막 자손 클래스 조상이 될수없음
final 변수->상수
final 메서드->오버라이딩이 안되는 메서드
abstract 추상의, 미완성의
abstract class 미완성 설계도, 객체를 생성할수 없음,클래스내에 추상메서드를 포함하고 있음
추상클래스를 상속받아서 완전한클래스를 만든후에 객체생성이 가능하다.
abstract 메서드 선언부만 작성하고 구현부는 작성되지 않은 추상메서드임.
12.접근제어자
public>protected>(defalt)>private
public은 접근제한이 전혀 없음.
protected은 같은패키지 +다른 패키지의 같은패키지클래스를 상속받은 자손클래스에서 접근 가능
(defalt)은 같은패키지 내에서만 접근가능.
private은 같은클래스 내에만 접근가능.