Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- python
- 열거형
- inheritance
- 백준
- 객체 지향
- 내부 클래스
- 생성자
- 프림알고리즘
- nextInt
- 추상 클래스
- 제네릭
- 인터페이스
- Encapsulation
- abstract
- 캡슐화
- this
- java
- 추상화
- 17472
- 다형성
- 최소신장트리
- 상속
- 버퍼비우기
- Scanner
- polymorphism
- 객체지향
- Final
- 와일드카드
- enum
Archives
- Today
- Total
쫑쫑이의 블로그
생성자와 this & this(), 내부 클래스 본문
생성자에 대해 공부하기 전에는 생성자는 new를 가리키는 것으로,
this는 클래스 내부 메서드에서 필드값 참조할때 사용하는 것이라고 알고 있었다.
내부클래스는 클래스 내부에 선언한 클래스일텐데 왜 만들고 어디에 사용하는지는 모른다.
생성자인줄 알았던 new는 키워드이고,
생성자의 역할은 인스턴스 변수를 초기화 하는 것이며,
생성자는 클래스 이름과 같게 써야한다.
생성자와 메서드의 차이
- 생성자는 기본적으로 반환값이 없다
- 메서드의 경우 반환값이 없을 때 void를 써줘야하지만 생성자는 쓰지 않는다
클래스 내에 생성자를 적지 않으면 눈에 보이지 않게 자동으로 기본 생성자를 생성해준다.
class Test {
public Test() {
System.out.println("기본 생성자");
}
}
생성자를 직접 만들면 자동적으로 만들어주는 기본 생성자 사용못함
public class Main {
public static void main(String[] args) {
Test test = new Test(); // 에러발생
}
}
class Test {
public Test(int t) {
System.out.println("생성자");
}
}
this를 사용하면 아래와 같이 인스턴스 변수나 클래스 변수를 가져다 쓸 수 있다.
public class Main {
public static void main(String[] args) {
Test test = new Test(3);
}
}
class Test {
int a;
static int b = 1;
public Test(int a) {
System.out.println(a);
System.out.println(this.a);
System.out.println(this.b);
}
}
// 결과값
// 3
// 0
// 1
this()는 생성자 안에서 다른 생성자를 부르는 기능을 한다.
()안에 매개변수를 적어 원하는 생성자를 불러올 수 있다.
public class Main {
public static void main(String[] args) {
Test test = new Test(1.0);
}
}
class Test {
public Test() {
System.out.println("생성자 1");
}
public Test(int a) {
System.out.println("생성자 2");
}
public Test(boolean b) {
System.out.println("생성자 3");
}
public Test(double d) {
this();
// this(1);
// this(true);
}
}
// 결과값
// 생성자 1
내부 클래스
- 내부클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스 4종류가 있다.
- 캡슐화하여 정보 은닉하는 목적으로 내부클래스를 사용한다.
정적 내부 클래스를 제외한 클래스들은 외부 클래스의 인스턴스 변수와 클래스 변수 모두 호출 가능하다
하지만 static을 사용한 선언은 불가 static을 사용하려면 정적 내부클래스에 선언 해야한다.
'공부 > JAVA' 카테고리의 다른 글
버퍼 비우기(Scanner nextInt) (0) | 2022.09.09 |
---|---|
객체지향 4대 특성 - 추상화 (Abstract) (0) | 2022.09.07 |
객체지향 4대 특성 - 다형성 (Polymorphism) (0) | 2022.09.07 |
객체지향 4대 특성 - 캡슐화 (Encapsulation) (0) | 2022.09.06 |
객체지향 4대 특성 - 상속 (Inheritance) (0) | 2022.09.06 |