객체를 만들기 위한 설계도
클래스명 객체명 = new 클래스명();
public class Person {
// 필드
String name;
int age;
// 생성자
Person (String name, int age) {
this.name = name;
this.age = age;
}
Person () {}
// 메서드
public void printInfo() {
System.out.println("name : " + name);
System.out.println("age : " + age);
}
}
main 클래스에서 객체 생성하기
public class Ex01 {
public static void main(String[] args) {
// 생성자로 클래스 생성하기
Person p1 = new Person("yuns", 99);
// 기본 생성자로 각각 값 지정해서 생성하기
Person p2 = new Person();
p2.name = "Java";
p2.age = 123;
p1.printInfo();
p2.printInfo();
}
}
객체가 생성될 때 자동으로 호출된다.
클래스명과 이름이 동일해야하며 리턴 타입은 없음
this : 객체 자신을 의미
this.name = name;에서
this.name(=객체 자신의 name) = name(매개변수의 name);
이다.
this() : 생성자의 호출
하나의 클래스 내에서 같은 이름의 메서드를 매개변수의 개수 또는 타입을 다르게 하여 여러 개 정의 할 수 있는 것
클래스의 변수나 메서드의 접근에 제한을 두는 키워드
기존 클래스에 기능을 추가하거나 재정의해서 새로운 클래스를 정의하는 것
class 자식클래스명 extands 부모클래스명 {}
super : 부모 클래스와 자식 클래스의 멤버 이름이 같을 때 구분
super() : 부모 클래스의 생성자 호출
부모 클래스의 메서드를 자식 클래스에서 재정의하는것
class Student extends Person {
String name;
int score;
Student (String name, int age, int score) {
// super(name, age); 부모 클래스인 Person클래스의 생성자를 호출하는것
this.name = name; // Student 클래스의 name
super.name = name; // 상속 받은 name
this.age = age; // 상속 받은 age
this.score = score; // Student 클래스의 score
}
// 오버라이딩
public void printInfo() {
// System.out.println("name = " + name);
// System.out.println("age = " + age);
super.printInfo(); // 부모에서 이미 정의된 메서드 사용하기
System.out.println("score = " + score);
}
}
클래스 안에 선언한 클래스 (중첩 클래스라고도 한다)
외부 클래스에서는 내부 클래스에 접근 불가하지만, 내부 클래스에서는 외부 클래스에 접근 가능하다