모든 생성자의 앞에는 this() 또는 super()가 있어야 한다.
선언하지 않았다면 디폴트로 내부에서 this()가 붙는다.
this 키워드 / this() 메소드
this.(변수명) //(=키워드) 생성자에서 여러변수 초기화
this(); //생성자 호출
this(); 메소드를 사용하여 중복성제거
class A{
int a, b, c, d;
A(){
a=1;
b=2;
c=3;
d=4;
}
A(int aa){
this();
a = aa;
}
A(int aaa, int bbb){
this(a);
b = bbb;
}
}
super 키워드 / super() 메소드
super.(변수명) //(=키워드) 부모 클래스 내에 있는 메소드 호출
super(); //부모생성자 호출
class A{
void abc(){
System.out.println("A_abc()");
}
}
class B extends A{
void abc(){
System.out.println("B_abc()");
}
void bcd(){
super.abc();
}
}
public class Test{
public static void main(String[] args){
B b = new B();
b.bcd();
}
}
super가 붙어있어 부모클래스에 속해있는 abc메소드를 찾아감.
this.abc();나 abc(); 였다면 B클래스 내에 있는 abc()를 찾아감.
Object Class
자바의 모든 클래스들의 부모 클래스
java내의 모든 class들은 Object Method를 가진다.
Object class의 주요 method
자료형
|
메소드명
|
비고
|
string
|
toString()
|
Object 객체의 정보 패키지.클래스명 @해시코드
일반적으로 오버라이딩하여 사용
|
boolean
|
equals(Object obj)
|
입력 매개변수 obj 객체와 stack 메모리 값(번지) 비교
등가 비교 연산자 == 과 동일한 결과
|
int
|
hashCode()
|
객체의 hashCode() 값 리턴, Hashtable, HashMap 등의 동등 비교에 사용
위칫값을 기반으로 생성된 고유한 값.
|
void
|
wait()
wait(long timeout)
wait(long timeout, int nanos)
|
현재 스레드를 일시정지 상태로 전환
(waiting/timed-waiting)
보통 notify()또는 notifyAll()로 일시정지 해제
동기화 블록에서만 사용 가능
|
void
|
notify()
notify All()
|
wait()를 이용해 일시정지 상태의 1개의 스레드(notify())또는 전체 스레드(notify All())의 일시정지 해제
동기화 블록에서만 사용가능
|
Object Class override를 통해 변환하여
원하는 기능을 재정의하여 사용할 수 있다.
그러나
자바에서 제공하는 기본함수는 웬만하면 그대로 사용하는 것이 좋다.
필요한 기능이 있다면 그와 비슷한 기능을 제공하는 함수를 작성하여 사용하는 것이 좋다.
final
final 필드, final 지역변수
▶ 처음에 지정한 값을 바꿀 수 없다.
▶ 실행을 모두 마치고 새로 실행할 때까지 값은 변하지 않는다.
final 메소드, final 클래스
final 메소드
|
final 클래스
|
상속을 사용해도 Override 불가.
|
상속 불가
|
추상(Abstract)
추상클래스
- 추상메소드를 하나 이상 포함하는 클래스
추상클래스, 추상 메소드가 속해있는 클래스.
정의방법:
1. 클래스 앞에 abstract 키워드를 붙인다.
2. 내용이 비어있는 메소드를 선언한다. (구현없이 선언만)
특징:
객체를 직접 생성할 수 없다.
추상 메소드, 구현없이 선언만 해놓은 메소드 (껍데기 생성)
이 메소드는 꼭! 나중에 구현해야한다.
abstract class A{
abstract void abc();
}
class B extends A{
void abc(){ ...
}
}
인터페이스(Interface)
모든 필드가 public static final
모든 메소드가 public abstract (default method 제외)
default 메소드 public
자체적으로 객체 생성
인터페이스의 정의
다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스
인터페이스의 특징
interface A{
public static final int a=3; //인터페이스 내의 모든 변수는 public static final
public abstract void abc();
}
interface B{
int b=3; //public static final
void bcd(); //public abstract
}
인터페이스의 상속(implements)
인터페이스 클래스를 상속받으려면 extends가 아닌 implements를 사용하여 상속받는다.
인터페이스 클래스를 상속받는 클래스에서 꼭! 선언했던 추상메소드를 구현해야한다.
*interface 쓸 때 public 붙이기
*이너클래스 = 내부클래스
디폴트 메소드를 사용하면 꼭 구현하지 않아도 된다.
(접근지정자 public 뒤에 default)
자식→부모 디폴트 메소드 호출
A.super.abc(); → (부모클래스의) default void abc(){ ... }
정적메소드를 사용하면 클래스의 정적메소드 처럼
객체를 생성하지않고 호출할 수 있다.
(인터페이스명).(정적 메소드명)
'프로그래밍 > Java' 카테고리의 다른 글
[Java] Java의 문법(상속, 캐스팅, 오버라이딩, 키워드) (0) | 2023.06.21 |
---|