반응형

제목:인사동쌈지길

 

다형성이란?

여러가지 형태를 가질 수 있는 능력

한타입의 참조 변수를 여러 타입의 객체를 참조 하게 함

 

조상클래스 타입의 참조 변수로 자손클래스의 인스턴스를 참조

 

class A {}

 

기본

class B extends A{

A a=new a();

B a=new B();

}

 

class B extends A{

B b=new B();

A a=new B(); 가능

B b=new A(); 불가 

}

 

조상타입의 참조변수 B로 자손 타입의 인스턴스 B를 참조 할수 있다.

반대로 자손타입의 참조변수 B로 조상타입의 인스턴스 A를 참조 할수 없다.

 

참조변수의 형변환

 

자손타입 →조상타입(UP-casting) :형변환 생략 가능

자손타입 ←조상타입(DOWN-casting): 형변환 생략 불가

 

class A{}

 

class B extends A{}

 

class C extends A{}

 

B b=(B)c; X

C c=(C)b; X

 

B와 C는 직접적인 관계가 없다.

 

B b=new B();

A a=b; //A a=(A)b; 생략

b2=(B)a; //형변환은 꼭 써줘야함

 

Object타입은 끝판왕이니까 다룰수 있는 멤버 개수가 많기 때문에 어떤 클래스 타입을 가지고와도 문제가 되지 않는다

그래서 형변환을 생략함

 

형변환은: 참조변수의 타입을 변환  인스턴스를 변환 x 참조 변수의 형변환은 인스턴스에 아무런 영향 x

 

단지. 참조 변수의 형변환을 통해 참조하는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절함

 

A a=null; A를 선언후 초기화

 

B b=new B(); 인스턴스를 생선 B타입의 참조변수가 참조하도록

 

a=b; b가 a를 참조하도록 한다

b2=(B)a;

 

A a=new A();

b=(B)a;에러 b=(B) a=new a();  A=B같다고 하는거랑 같음

조상 a타입의 인스턴스를 자손 b타입의 참조 변수를 참조하는것은 허용x

 

A a=new A(); 를 A a=new B();로 변경하면  b=(B)a; 가능

 

캐스트 연산자를 사용하면 서로 상속관계에 있는 클래스 타입의 참조 변수간의 형변환은 양방향으로 자유롭게 수행

그러나 참조변수가 참조 하고 있는 인스턴스의 자손타입으로 형변환을 하는 것은 허용x

 

 

instanceof연산자

인스턴스의 타입을 알아볼수 있다.

 

연산 결과값은 boolean값인 true,false

 

if( A instane of B){

실행할일

}else if(A instance of C){

실행할일

}

 

어떤 타입에 대한 instance of 연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 것

upcasting,downcasting

 

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

 

변수가 똑같이 정의되있을시

 

class A{int x}

class B extends A{int x}

 

A a=new B();

B b=new B();

 

위에서 불러올때 우선순위 A>B

 

또 별도로 B클래스에 정의 되있지 않으면 class B extends A {}

부모클래스의 변수값을 가져오기만 함.

 

super=위 클래스 불러와라~

this=지금 있는 클래스 내용 불러와라~

 



매개변수의 다형성

 

class A{}

class B extends A{}

class C extends A{}

 

class X{

void x(B b){할일}

void x(C c){할일}

}

 

대체→void x(A A){할일}

 

x의 일을 실행할때

최고우위에 상속이되어있다면

X x=new X();

x.x(b) or x.x(c) 로 입맛에 맛게 불러올수 있다.

 

public void print(object obj){

write(String.valueOf(obj));

}

public[누구나] static[어디서든,언제든] String[문자값으로 돌려줄게] valueOf[내이름](Object obj[받은값]){

return[이거돌려준다] (Obj == null)[obj값이 없다] ?[삼항연산자] "null"[조건이 true일떄 :앞에 값을 반환] : obj.toString()[조건이 falue일때 뒤에 값을 반환]; //문자열 반환

}

 

여러종류의 객체를 하나의 배열로 다루기

 

A a1=new B();

A a2=new C();

A a3=new D();

 

=A a[]=new A[3];

a[0]=new B();

a[2]=new C();

a[3]=new D();

 

Vector클래스

10개이상일경우 사용

내부적으로 Object타입의 배열을 가지고 있다. 배열에 객체를 추가하거나 제저 할수 있게 작성

 

 

 

 

반응형

'코딩 > Java' 카테고리의 다른 글

인터페이스(interface)  (0) 2016.03.24
추상클래스(abstract class)  (0) 2016.03.22
제어자(modifier)  (0) 2016.03.16
오버라이딩(overriding)  (0) 2016.03.16
상속(inheritance)  (0) 2016.03.16


반응형

제목:압구정 가로수길

 

제어자란

클래스,변수,메서드의 선언부에 함께 사용되어 부가적인 의미 부여

 

접근제어자:public,protected,default,private

그외:static,final,abstract,native,transient,synchronized,volatile,strictfp

 

여러 제어자를 조합하여 사용가능

단 접근제어자는 하나만 사용가능

 

static :클래스의,공통적인

static이 사용될 수 있는곳: 멤버변수,메서드,초기와 블럭

 

멤버변수:공통적으로 사용가능한 클래스 변수가됨

인스턴스 생성 하지 않고도 사용가능

클래스가 메모리에 로드될떄 사용

 

메서드:인스턴스를 생성하지도 안항도 호출이 가능한 static메서드

static메서드 내에서는 인스턴스 멤버들을 직접 사용 x

 

final : 마지막의 변경될수없는

한 프로젝트에서 정해진 변경하지 않는 클래스,변수,메서드에 사용

불러와 사용은 가능하나 변경할수없음 일종의 락

 

생성자를 이용한 final 멤버변수 초기화

일반적인 선언과 초기화를 동시에 하지만 인스턴스 변수에 경우 생성자에서 초기화 되도록 할수 있다.

이기능을 활용시 각 인스턴스 마다 final이 붙은 멤버변수가 다른값을 갖도록 하는게 가능

 

해당 클래스의 생성자를 불러올시에 생성자를 이용 변수를 입력 하여 초기화가능.

 

abstract : 추상의,미완성의

 

클래스 내에 추상 메서드가 존재 한다는것을 쉽게 알하려고 쓰임

 



접근 제어자 란?

멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서접근하지 못하도록 제한하는 역활

 

default는 표기x 지정안되있으면 무조건 default

 

사용되는곳: 클래스,멤버변수,메서드,생성자

private: 같은 클래스에서만 접근가능

default: 같은패키지 내에서만 접근이 가능

protected: 같은패키지내에서 그리고 다른 패키지의자손클래스에 접근

public: 접근제한이없음

 

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

 

접근제어자를 사용하는 이유

1.클래스 내부에 선언된데이터를 보호하기 위해서.

2.데이터값을 유지하고 내부데이터를 외부에서 함브로 변경하지 못하도록 하기 위해서 외부로부터 접근을 제어함

 

생성자 접근제어자

생성자에 private로 지정하면  인스턴스 생성을 제한할수 있다.

외부에서는 사용할수 없으나 내부 클래스 상에서는 사용가능

 

제어자의 조합

1.메서드의 static과 abstract를 같이 쓸수없음

추상과 내용은 함께할수없음

2.클래스의 abstract와 final을 동시에 사용할수 없음

final은 클래스를 확장x  abstract는 상속을 통해서 완성된다는 의미 모순됨

3.abstract메서드의 접근 제어자가 private일수없다

자손클래스에서 구현해줘야하는데 접근제어자가 private이면 자손클래스 접근불가

4.메서드의 private와 final을 같이 사용할수 없다.

접근 제어자 private인 메서드는 오버라이딩 x 둘중하나만 사용해도 의미 충분함

 

 

 

반응형

'코딩 > Java' 카테고리의 다른 글

추상클래스(abstract class)  (0) 2016.03.22
다형성(polymorphism)  (0) 2016.03.21
오버라이딩(overriding)  (0) 2016.03.16
상속(inheritance)  (0) 2016.03.16
변수의 초기화  (0) 2016.03.14


반응형

제목:untitle

오버라이딩이란?

조상 클래스로 부터 상속 받은 메서드의 내용을 변경하는것

 

자식 클래스에서 부모 클래스의 메서드를 불러와 같은 형식으로 내용만 자식클래스에 맞도록 수정하는것.

 

class a {메서드 x}

 

class b extends a {메서드 x +@}

 

오버라이딩의 조건

메서드의 선언부는 조상의 것과 완전히 일치해야함

 

1.이름이 같아야함

2.매개변수가 같아야함

3.리턴타입이 같아야함

 

접근 제어자와 예외는 제한 조건 하에서만 다르게 변경할수있다.

1.접근 제어자는 조상클래스의 메서드 보다 좁은 범위로 변경 할 수 있다.

조상이 protected라면 오버라이딩의 자손은 protected나 public

접근제어자 public>protected>(default)>private

 

2.조상크래스의 메서드 보다 많은 수의 예외를 선언 할 수 없다.

ex)exception은 예외의 끝판왕 주의해서 쓸것

 

3.인스턴스 메서드를 static메서드로 또는 그 반대로 변경x

 



오버로딩 vs 오버라이딩

 

오버로딩:기존에 없는 새로운 메서드를 정의하는것 (new)

오버라이딩:상속받은 메서드의 내용을 변경하는것(change,modify)

 

super

상속받은 클래스에서 멤버(변수,메서드)가 같을때 구별하기 위해서super를 사용

static메서드는 불러올수 없다.

 

super.변수

super.메서드()

이런식으로도 사용가능 this는 자기 자신 super는 상속받은 부모의 것을 불러오는 개념

 

super(): 조상클래스의 생성자

this():같은 클래스의 다른 생성자를 호출

 

Object는 끝판왕이니 제외한 모든클래스이 생성장 첫줄에는 생성자를 호출해야함

그렇지 않으면 컴파일러가 자동으로 super(); 를 생성자이 첫줄에 삽입

 

 

class object {}

 

class a extends object{super()} object클래스의 맞는 내용 불러옴

 

class b extends a {

super()

}

a클래스의 맞는 내용을 불러옴

 

순차적으로 올라감 super()

반응형

'코딩 > Java' 카테고리의 다른 글

다형성(polymorphism)  (0) 2016.03.21
제어자(modifier)  (0) 2016.03.16
상속(inheritance)  (0) 2016.03.16
변수의 초기화  (0) 2016.03.14
생성자(constructor)  (0) 2016.03.14

+ Recent posts