class
키워드로 선언1) public
: 어디서든 접근 허용
2) protected
: 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용
3) private
: 클래스 내 (클래스 내에 정의된 함수) 에서만 접근 허용
4) 디폴트 : 접근지정자 생략
new
키워드로 생성
레퍼런스.멤버
//Circle 클래스 이름
//객체 생성 - new 사용
Circle pizza;
pizza = new Circle();
//객체 멤버 접근 - (.)연산자
pizza.radius=10;
pizza.name="피자";
객체가 생성될 때 초기화를 위해 실행되는 메소드.
매개변수가 없고 아무 작업 없이 리턴하는 생성자, 클래스에 생성자가 하나도 선언되지 않았을 경우 컴파일러에 의해 자동 삽입됨
(하나라도 선언 되었다면 자동 삽입 X)
객체 자신에 대한 레퍼런스, this.멤버
[주로 쓰이는 경우]
1. 객체의 멤버 변수와 메소드 변수 혹은 메소드의 매개변수와 이름이 같을 때
2. 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
3. 메소드가 객체 자신의 레퍼런스를 반환할 때
public Book(String title){
this(title, "작자미상");
}
public Book(String title, String author){
this.title=title;
this.author=author;
}
//main 내 코드 중
Book loveStory = new Book("춘향전");
//1번 생성자로 갔다가 2번 생성자로 옮겨져 "춘향전 작자미상" 이 된다.
이름이 같은 메소드를 작성할 수 있다
new 에 의해 할당된 객체 메모리를 가용 메모리로 되돌려주는 행위
가비지 : 가리키는 레퍼런스가 하나도 없는 객체 (사용할 수 없게 된 메모리)
가비지 컬렉션 : 자바 가상 기계의 '가비지 컬렉터'가 자동으로 가비지 수집 반환
System.gc()
1) private
: 동일 클래스 내에서만 접근 헝용
2) protected
: 같은 패키지 내 모든 클래스에서 접근 허용 및 상속 받은 서브 클래스는 다른 패키지에 있어도 접근 가능
3) public
: 다른 모든 클래스에서 접근 허용
4) 디폴트
(접근지정자 생략) : package-private라고도 함. 같은 패키지의 클래스에만 접근 허용
한 마디로 공유 안함.
1) 공간적 특성 : 멤버들은 객체마다 독립적으로 별도 존재 ('인스턴스 멤버' 라고 부름)
2) 시간적 특성 : 필드와 메소드는 객체 생성 후 사용 가능
3) 비공유 특성 : 멤버들은 다른 객체에 의해 공유되지 않고 배타적
객체마다 생기는 것이 아니라 클래스 당 하나만 생성됨, 클래스 멤버라고도 부름
객체를 생성하지 않고도 사용 가능
한 마디로 공유함.
[특성]
1) 공간적 특성 : static 멤버들은 클래스 당 하나만 생성 ('클래스 멤버' 라고 부름)
2) 시간적 특성 : static 멤버들은 클래스가 로딩될 때 공간 할당
3) 공유의 특성 : static 멤버들은 동일한 클래스의 모든 객체에 의해 공유
class StaticSample {
//non-static
int n; // non-static 필드
void g() {...} // non-static 메소드
//static
static int m; // static 필드
static void f() {...} // static 메소드
}
Circle c1;
c1.m; //static m
Circle.m; //static m
클래스 상속 불가
final class FinalClass {
.....
}
class SubClass extends FinalClass { // 컴파일 오류. FinalClass 상속 불가
.....
}
오버라이딩 불가
public class SuperClass {
protected final int finalMethod() { ... }
}
class SubClass extends SuperClass { // SubClass가 SuperClass 상속
protected int finalMethod() { ... } // 컴파일 오류, 오버라이딩 할 수 없음
}
+) 오버라이딩이란?
오버로딩(overloading)이란 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의하는 것이었습니다.
오버라이딩(overriding)이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이라고 할 수 있습니다.
final 필드, 상수 선언
class SharedClass{
public static final double PI = 3.14;
}