본문 바로가기

JAVA

#4 제어문 추가, 객체지향 특징, 접근지정자, 생성자, this

<제어문>

1.break문

- switch블럭 또는 loop블럭(for,while,do~while)내에서 사용하며

해당 영역을 빠져나가는 역할.

2.continue문

- 반드시 loop영역내에서만 사용!!

- loop영역의 끝괄호 역할!!

for: 증감자 ---> 조건식

while: 조건식

do~while: 조건식


<객체지향의 특징> 자바는 OOP다!! (Object Oriented Programming)

1. 캡슐화

- 클래스에 필드와 메소드를 묶어두는 것.

- 정보은닉(private)

- 모듈성

2. 상속 ★

- 부모클래스가 갖는 속성(필드)과 기능(메소드)을 자식에게 물려주는 것.

- 관련키워드: extends

-----> class 자식 extends 상속받고자하는 부모클래스명

is a 관계!!

자식은 부모다!!

===> 자식은 부모로 형변환이 가능하다!!

- 단일상속이 기본.(extends 뒤에 한 개의 부모클래스명만 위치)

java.lang.Object 부모클래스, 상위클래스, super클래스

java.lang.String 자식클래스, 하위클래스, sub클래스

※Object는 자바에서 최상위클래스!!

===>기본 import java.lang.*;

class My ===> 기본 extends Object

{

}

3. 다형성 ★★


<접근지정자> Access Control

1. public - 서로 다른 패키지에서도 접근 가능.

2. protected - 서로 같은 패키지에서 접근 가능.

(서로 다른 패키지라도 상속관계에 있는 자식클래스에서는 접근가능)

3. default(생략) - 서로 같은 패키지에서 접근 가능.

4. private - 같은 클래스내에서만 접근 가능.

(같은 클래스내의 멤버끼리만 호출가능 - 외부클래스에서는 호출불가, 정보은닉)

[접근지정자 (public,생략)] class 클래스명{

[접근지정자 4개] 자료형 변수명;

[접근지정자 4개] 리턴형 메소드명(){

}

}


<생성자> Constructor

- 새로운 객체를 생성하기 위해서 초기화해주는 메소드.

규칙) 1번,2번을 만족하는 메소드를 생성자라고 함.

1. 생성자의 이름은 반드시 클래스명과 일치(대소문자 일치)

2. 리턴자료형을 명시하지 않는다. (void조차 X)

----> 1,2: 일반 메소드와의 차이점

3. 객체생성시 자동으로 호출.

4. 클래스내에 생성자가 하나도 없다면

자바컴파일러가 컴파일시 자동으로 (기본생성자를) 추가.

※ 주의) 단, 클래스내에 한개 이상의 생성자가 정의되어 있다면

컴파일러는 소스코드에 관여하지 않는다!!

class Abc{

int su;

My my;

Abc(){//기본생성자(매개변수 비어있는 생성자) ----> 초기화(값의 할당) 메소드

//멤버필드에 대한 초기화 작업

su=10;

my = new My();

//선행작업

}

Abc(String name){//오버로딩 생성자

}

ABc(int age){

//---> 에러발생: 클래스명과 일치하지 않으므로 일반메소드!! ---> 리턴자료형을 명시해야함.

}

void hello(){

}

}


------------------------------------------------------------------------------

Abc a = new Abc();

--- ---------

동적메모리할당 키워드 기본생성자 호출!!

a.hello();

Abc a2 = new Abc("홍길동");

--------------

오버로딩 생성자 호출!!

a2.hello();


<this> 자기참조 연산자

===> 현재클래스를 가르키는 레퍼런스변수(참조변수)!!

===> 보통은 생략함

1. 메소드 내에서 사용.

2. 객체생성자내에서 다른 생성자를 호출시 사용.

3. 매개변수와 멤버변수(필드)를 구분하기 위해

멤버변수앞에 this.을 붙여 사용.

형식)

this.필드명

this.메소드명();

this();//생성자 호출

참고)

super.필드명

super.메소드명();

super();//부모클래스의 생성자 호출

class A{

int su;//int su=0;

String str;//String str=null;

A(){//기본생성자

this("자바");

}

A(String str){//오버로딩 생성자

this.str = str;

//멤버변수 지역변수

}

void hello()

{

System.out.println("STR="+ str);

System.out.println(su);

System.out.println(this.su);

gildong(); ===> this.gildong();

}

void gildong(){

}

}