java 정리

원종서·2021년 12월 26일
0

java

목록 보기
1/9

제어자
메서드 앞에 final을 붙이면 오버라이딩 못함
class 앞에 붙이면 상속 못함
변수 앞에 붙이면 상수됨

class Card{
	final String NUMBER;
    final int KIND; 
    
    Card(String kind, int num){
    	NUMBER = num;
        KIND = kind;
    }
}

위처럼 final이 붙은 인스턴스 변수는 생성자, 명시적롤 통해 초기화할 수 있다.

추상 클래스의 인스턴스화 불가능

4.5 접근제어자
접근제어가자가 사용될 수 있는 곳: 클래스, 매개변수, 메서드 , 생성자

public : 같은 클래스, 같은 패키지, 자손 클래스, 전체
protected: 같은 클래스, 같은 패키지, 자손 클래스
default : 같은 클래스, 강튼 패키지
private : 같은 클래스

접근제어자를 이용한 캡슐화

생성자 앞에 private가 붙으면 상속받을 수 없다ㅡ 왜냐하면 자손의 생성자ㅇ에서 부모의 생성자를 호출하기 떄문, 그래서 가독성을 위해 private 생성자를 쓰는 클래스는 클래스 앞에 final을 붙여주는 것이 좋다.

다형성

여러가지 형태를 가질 수 있는 능력
즉 조상클래스의 타입의 참조변수로 자손클래스의 참조변수를 참조할 수 있도록 하였다.

Child c = new Child();
Parent p = new Child();

실제 인스턴스가 Child 타입 일고 할 지라도 참조변수 p는 Child인스턴스의 모든 멤버를 사용할 수 있다.

Parent의 참조변수로는 Child의 인스턴스 중에서 Parent의 맴버들만 사용할 수 있다.

반대로 Child c = new Parent(); 는 불가능하다.
인스턴스 Parent의 개수보다 참조변수 c가 사용할 수 있는 맴버 개수가 더 많기 떄문인다.

그래서 참조변수사 사용할 수 있는 맴버의개수는 인스턴스의 맴버 개수보다 작거나 같아야 한다

5.2 참조변수의 형변환
서로 상속관계에 있는 클래스 사이에서 형변환 가능

자손타입 -> 조상타입 : 업캐스팅 , 형변환 생략가능
자손타입 <- 조상타입 : 다운캐스팅, 형변환 생략불가

Car 클래스를 FireEngine , Ambulance 클래스가 상속함

Car car = null;
FireEngine fe = new FireEngine();
FireEngine fe2 = null;

car = fe; < 업캐스팅 , 암시적형변환 가능
fe2 = (FireEngine)car; < 묵시적형변환, 다운캐스팅

형변환은 참조변수의 타입을 변환하는 것이지, 인스턴스를 변환하는 것은 아니기 때문에 참조벼누의 형변환은 인스턴스에 아무 영향을 끼지지 않는다.,
단지 참조변수의 형변환을 통해, 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 개수를 조절하는 것이다

참조변수가 가르키는 인스턴스의 자손타입으로 형변환은 허용하지 않는다. 그래서 참조변수가 가르키는 인스턴스으 ㅣ타입이 무엇인지 확인하는게 중요하다.

위를 위해 instanceof 연산자가 존재한다.

참조변수 instanceof 클래스명

5.4 참조변수와 인스턴스의 연결

맴버변수가 조상클래스, 자손 클래스에 중복으로 정의된 경우, 조상타입의 참조변수를 사용했을 때는 조상 클래스에 선언된 맴버변수가, 자손 타입일때는 자손클래스에 선언된 맴버변수가 사영딘다.

5.5 매개변수의 다향성

  1. 추상클래스 ( 미완성된 설계도)

추상클래스는 인스턴슬화할 수 없다.
추상클래스에도 생성자가 있으며, 맴버변수와 메서드 갖을 수 있다.

6.3 추상클래스 작성

  1. 인터페이스 (기본 설계도)
    오로지 추상메서드와 상수만을 멤버로 갖을 수 있다.
intferface PlayingCard{
  int CLOVER = 1; // public static final int CLOVER = 1

  String getCardKind(); // public abstract String getCardKind();
}

1.8부터는 static 메서드와 디폴트 메서드를 허용함.

인터페이스의 상속
인터페이스로만 상속받을 수 있음

인터페이스 구현

7.5 인터페이슬ㄹ 이용한 다중상속

Tv 클래스와 VCR클래스가 있을때 TVCR클래스를 작성하기 위해 두 클래스로부터 상속을 받는다 했을때 , 한쪽을 상속하고 나머지는 클래스 내에 포함시켜본다

public class TV{
...
}
public class VCR{
	public void play(){
    	//...
    }
    ...
}

public interface IVCR{
	public void play();
    ...
}


public class TVCR extends TV implements IVCR{
	VCR vcr = new VCR();
    public void play(){
    	vcr.play();
    }
    ...
    
}

0개의 댓글