TIL

조지성·2022년 3월 19일
0

TIL

목록 보기
45/78
post-thumbnail

2022.03.19

  • 스프링 입문 146 ~ 160P
  • C언어

자바가 확장한 객체 지향

abstract 키워드 - 추상 메서드와 추상 클래스

  • 추상 메서드
    • 선언부는 있는데 구현부가 없는 메서드
    • 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스로 선언해야한다.
  • 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다. new를 사용할 수 없다.
  • 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. 오버라이딩 강제
  • 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.
package ex04.abstractMethod01;

public classextends 동물{

	@Override
	void 울어보세요() {
		System.out.println("찍찍");
	}

}
package ex04.abstractMethod01;

public class 고양이 extends 동물{

	@Override
	void 울어보세요() {
		System.out.println("야옹");
	}
	
}
package ex04.abstractMethod01;

public class 병아리 extends 동물 {

	@Override
	void 울어보세요() {
		System.out.println("삐약");
	}

}
package ex04.abstractMethod01;

public abstract class 동물 {
	abstract void 울어보세요();
}
package ex04.abstractMethod01;

public class Driver {
	public static void main(String[] args) {
		동물[] 동물들 = new 동물[5];
		
		동물들[0] = new();
		동물들[1] = new 고양이();
		동물들[2] = new 병아리();
		
		for(int i=0;i<동물들.length;i++) {
			동물들[i].울어보세요();
		}
	}
}

생성자

  • 클래스의 인스턴스, 즉 객체를 만들 때마다 new 키워드를 사용
  • 클래스명( ) 도 메서드지만, 반환값이 없고 클래스명과 같은 이름을 가진 메서드를 객체를 생성하는 메서드, 즉 객체 생성자 메서드
  • 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다.
  • 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지않는다.
package ex04.constructor;

public class Driver01 {
	public static void main(String[] args) {
		 동물 뽀로로 = new 동물("뽀로로");
		 //동물 무명 = new 동물();
	}
}

클래스 생성 시의 실행 블록,static 블록

  • 클래스는 생성자는 존재하지 않지만, 클래스가 스태틱 영역에 배치될 때 실행되는 코드블록은 있다 => static 블록
    • 해당 클래스를 사용하는 코드가 없으면 해당 클래스의 static블록을 실행하지 않는다.
    • 해당 패키지 또는 클래스가 처음으로 사용될 때 T메모리의 스태틱 영역에 로딩
      • 클래스의 정적 속성을 사용할 때
      • 클래스의 정적 메서드를 사용할 때
      • 클래스의 인스턴스를 최초로 만들 때
    • static블록은 한 번만 실행
package ex04.staticBlock;

public class 동물 {
	static {
		System.out.println("동물 클래스 레디 온!!");
	}
}
package ex04.staticBlock;

public class Driver {
	public static void main(String[] args) {
		System.out.println("main시작");
		동물 뽀로로 = new 동물();
		동물 사슴 = new 동물();
	}
}	

final 키워드

  • 클래스, 변수 메서드에 사용

final과 클래스

  • 상속을 허락하지 않겠다.
public final class 고양이 {}

final과 변수

  • 변경 불가능한 상수
    • 정적상수
      선언 시,또는 정적 생성자에 해당하는 static 블록 내부에서 초기화
    • 객체 상수
      선언 시,또는 객체 생성자 또는 인스턴스 블록에서 초기화
    • 지역 상수
      선언 시,또는 최초 한 번만 초기화
package ex04.finalVariable;

public class 고양이 {
	final static int 정적상수1 = 1;
	final static int 정적상수2;
	
	final int 객체상수1 = 1;
	final int 객체상수2;
	
	static {
		정적상수2 = 2;
		
		//상수는 한 번 초기화되면 값을 변경할 수 없다.
		//정적상수2 = 4;
	}
	
	public 고양이() {
		객체상수2 = 2;
		
		//상수는 한 번 초기화되면 값을 변경할 수 없다
		// 객체상수2 = 4;
		
		final int 지역상수1 = 1;
		final int 지역상수2; 
		지역상수2 =2 ;
	}
}

final과 메서드

  • 재정의, 오버라이딩 금지
package ex04.finalMethod;

public class 동물 {
	final void 숨쉬다() {
		System.out.println("호흡 중");
	}
	
}
class 포우류 extends 동물 {
//	void 숨쉬다() {
//		System.out.println("재정의 불가능");
//	}
}
profile
초보 개발자의 성장기💻

0개의 댓글