1. static (공용)
static은 변수 및 메소드에서 사용 가능함
static이 선언된 변수 및 메소드는 공용의 기능을 한다
static이 선언된 변수 및 메소드는 자바 문법 상 클래스 안에서 정의가 되지만 클래스에 속한 것은 아님!
-> 객체가 생성되기 전에 생성된다.
따라서 해당 변수 및 메소드를 호출할 때는 '객체명.static' 형태의 문법으로 사용하지 않고 'class명.static'으로 호출함
2. 메소드 오버로딩
매개변수의 정보가 다르면 메소드 이름의 중복을 허용한다. ex) println();
public class OverLoading1 {
public static void main(String[] args) {
aaa("java");
aaa(8);
}
//오버로딩
public static void aaa(String str) {
System.out.println(str);
}
public static void aaa(int a) { //매개변수의 정보 다름 (이름 중복 허용)
System.out.println(a);
}
}
3. 상속
한 클래스는 다른 클래스로부터 상속받을 수 있다.
상속받은 클래스에서 정의된 변수 및 메소드를 가지게 된다.
상속의 문법 : 클래스명 extends 상속받을클래스명
public class Animal { //Animal 클래스 -> 부모클래스/수퍼클래스/상위클래스
String name;
int age;
public Animal() {
name = "";
age = 1;
}
public void eat() {
System.out.println("밥을 먹는다");
}
}
class Cat extends Animal { // Cat 클래스 -> 자식클래스/서브클래스/하위클래스
//Animal 클래스에서 상속받은 name, age 변수도 가지고 있음
int whiskers;
public Cat() {
//super(); 가 숨겨져 있음 -> 부모 클래스의 기본 생성자 호출 (Animal();)
whiskers = 10;
}
//Animal 클래스에서 상속받은 eat 메소드도 가지고 있음
public void meow() {
System.out.println("야옹");
}
}
예시의 Animal 클래스처럼 상속하는 클래스를 부모클래스, 수퍼클래스, 상위클래스라고 함
Cat 클래스처럼 상속받는 클래스를 자식클래스, 서브클래스, 하위클래스라고 함
3-1. super
상속 관계에서 자식클래스에 생성자를 호출하면 생성자 제일 첫 줄에 숨겨져 있는 super();가 실행되는데, 이는 부모 클래스의 기본 생성자를 호출하는 기능을 한다. (기본 생성자 -> 매개변수가 없는 생성자)
그래서 부모 클래스에 기본 생성자가 없다면 자식 클래스의 생성자에서 오류가 발생한다.
이런 오류를 해결하기 위해서는
1. 부모클래스에 무조건 기본 생성자를 정의해주거나
2. super()의 매개변수 정보를 부모클래스의 생성자 매개변수 정보와 동일하게 호출해줘야 함.
3-2. 접근 제한자
private : private로 선언된 변수 및 메소드는 상속을 받더라도 직접적으로 사용할 수 없다.
protected : private + 자식까지 사용을 허용한다.
3-3. 다중상속
자바는 다중상속을 지원하지 않지만 다중 상속을 한 것처럼 클래스를 구현할 수 있다.
public class Aaa {
int a;
}
class Bbb extends Aaa{
int b;
public void bbb() {
a = 10;
}
}
class Ccc extends Bbb{
public void ccc() {
a = 10;
b = 20;
}
}
** 새롭게 알게 된 것
this() -> 해당 클래스의 기본 생성자 호출
this(5) -> 해당 클래스의 생성자 중 매개변수로 정수 하나 받는 생성자 호출
+)this. -> 해당 클래스에 생성된 변수 호출
'TIL' 카테고리의 다른 글
| 230202 [Java] (String 클래스 / 인터페이스) (0) | 2023.02.02 |
|---|---|
| 230201 [Java] (다형성 / 형 변환 / 메소드 오버라이딩 / Object 클래스) (0) | 2023.02.01 |
| 230130 [Java] (접근 제한자 / 객체 배열) (0) | 2023.01.30 |
| 230127 [Java] (생성자 / this / setter & getter) (0) | 2023.01.27 |
| 230126 [Java] (클래스) (0) | 2023.01.26 |