본문 바로가기
인천일보아카데미/- 학습일지

[학습일지]JAVA교육일지 29일차

by w1z 2022. 6. 9.

1. Object 클래스

2. 메소드 오버라이드 (Method Override)

  • 정의
  • 사용법
  • 어노테이션(Annotation)

3. final

4. 인터페이스(Interface)

5. 추상 메소드/클래스(Abstract)

6. 형변환(Type Cast)


1. Object 클래스

   - java.lang  패키지(모든 패키지 중 기본 패키지 -> import 안해도 사용가능)

   - Object 클래스는 클래스 계층 구조에서 최상위 클래스이다.

   - 지구상의 모든 클래스는 부모 클래스로 Object를 가진다.

   - 모든 Class는 extends(상속) 을 안붙이면 자동으로 extends Object가 생성된다.

 

 

2. 메소드 오버라이드 (Method Override)

  (1) 정의

   - 메소드 재정의(수정)

   - 상속에서만 발생

 

  (2) 사용법

public static void main(String[] args) {

	Phone p1 = new Phone();
    p1.dial();



}

class Phone {
    public void dial() {
    	System.out.println("버튼을 눌러 CALL");
    }
}

class SmartPhone extends Phone {
	public void game() {
    	System.out.println("SmartPhone 자신의 메소드");
    }
    
    public void dial() {     //메소드 오버라이드(재정의)
    	System.out.println("화면을 터치해주세요");
    }
}


//output
----> 화면을 터치해주세요

 

  (3) 어노테이션(Annotation)

@Override <-- 어노테이션(Annotation)
public void test() {
}

쓰는이유?
--> 개발자가 해당 메소드 재정의 할 때 컴파일 오류를 보여줌으로써 에러 나는것을 방지한다.(편의성 제공)

 

3. final

  - final 키워드? ==> 수정금지!!

  - 변수, 메소드, 클래스에 적용가능하다.

  - 값을 초기화한 뒤에는 수정할 수 없다.

  - 고칠 수 없는 변수, 수정할 수 없는 변수

  - 클래스에서 멤버 상수는 접근 지정자를 public으로 하는 경우가 많다.

  - 상수명(final 변수명)은 항상 대문자로 만든다. (관습)

  - 예시)

//변수
int a = 10;
final int B = 20;

System.out.println(a);
System.out.println(B);

a = 30;
B = 40; //Error : The final local variable b cannot be assigned.


//output
---> 10
---> 20
---> 30
---> Error 발생


//메소드
class Test {
	private int a=10; //일반 객체 멤버 변수
    private final static int D=40; //정적 상수(final, 수정X)
    public final void test() {
    	//절대 고치면 안되는 메소드
    }
}

//클래스
final class Test { //절대 자식을 가질수 없는 클래스 --> 최종 클래스

}

 

4. 인터페이스(Interface)

  - 클래스의 일종(자료형)

  - 클래스와 구조/목적이 다르다.

  - 인터페이스는 객체를 생성할 수 없다.

//인터페이스 선언
interface Test {
	
    //인터페이스 멤버
    //구현부가 없는 메소드 -> 추상메소드 -> 호출해도 사용불가
	public abstract void test();
    
}

class AAA implements Test {

	@Override
    public void test() {
    	System.out.println("테스트");
    }
}

public static void main(String[] args) {
	AAA a = new AAA();
    a.test();
}


//output
---> 테스트 

  - 일반 상속에서 오버라이드는 개발자의 선택

  - 인터페이스 상속은 안하면 컴파일 오류 나오기때문에 오버라이드를 필수적으로 해야한다.  

 

5. 추상 메소드/클래스(Abstract)

  - 추상 클래스는 추상 메소드를 소유하기 때문에 객체를 생성할 수 있다.

  - 예시

//추상 클래스
abstract class Test {
	
    //추상 메소드(멤버)
    public abstract void ok();
    public abstract void no();
}

class AAA extends Test {

	@Override
	public void ok() {

	}

	@Override
	public void no() {

	}
}
< 추상클래스 VS 인터페이스 >
- 둘 다 추상 멤버를 가질 수 있다. (추상 메소드)
- 인터페이스는 구현 멤버를 가질 수 없다.
- 추상 클래스는 구현 멤버를 가질 수 있다.
- 인터페이스는 규칙만 강조 하고 싶을 때 사용한다.
- 추상클래스는 규칙도 강조하면서, 구현 멤버를 물려주고 싶을때 사용한다.

 

6. 참조형 형변환

  - 클래스간의 형변환

  - 상속 관계를 맺은 (직계)클래스간에만 가능하다.

  - 자식 class ---> 부모 class : 업캐스팅(Up Casting)

  - 부모 class ---> 자식 class : 다운캐스팅(Down Casting) 


MEMO >

 

# Object 클래스는 현재는 어떤것이 존재하는지만 알아두자.

 

# 변수 오버라이드는 가능하지만 의미가 전혀 없기 때문에 사용을 안한다.

 

# toString() 은 반환된 문자열을 그대로 업무에 사용하는것이 아닌, 개발자가 객체의 상태를 확인하는 용도로 쓰인다.

 

# 추상 클래스보다 인터페이스가 더 많이 씌인다. 이유는 추상클래스가 설계는 굉장히 어렵고, 반면에 인터페이스는 추상클래스보다 생각해야할 경우의 수가 작기때문이다.