package chapter08.classPart;
class Car {
// 맴버 변수 ,속성, 필드 (..클래서에 만들어진 변수)
String name;
boolean gasoline;
//기본생성자 //다른 생성자 없으면 생략 가능(명시적 생성자...) //별도의 생성자가 존재하지 않으면 무조건 1개는 필요하니까 기본생성자는 공짜로 만들어준다
Car() {
System.out.println("기본 생성자 호출");
}
//명시적 생성자
Car(String name1, boolean gasoline1){
name = name1;
gasoline = gasoline1;
System.out.println("명시적 생성자 호출");
}
//맴버 메서드
void run() {
if(gasoline) {
System.out.println("부릉 부릉");
} else {
System.out.println("덜컹 덜컹");
}
}
void stop() {
System.out.println("끼이익");
}
}
public class Class_basic1 {
public static void main(String[] args) {
Car korando = new Car(); //여기서 실행되어질때 생성자 먼저 호출 //파라미터 없음 기본생성자 호출
korando.name = "코란도C";
korando.gasoline =false;
System.out.println(korando.name);
korando.run();
Car equus = new Car("에쿠스", true); //파라미터 있음 명시적 생정자 호출
System.out.println(equus.name);
equus.run();
}
}
<출력결과>
기본 생성자 호출 //Car korando = new Car(); 이떄 호출 됨. 코란도C 덜컹 덜컹 명시적 생성자 호출 에쿠스 부릉 부릉
package chapter08.classPart;
class Human {
int age;
String name;
Human() {
System.out.println("기본 생성자 호출");
}
Human(int age2,String name2){
age = age2;
name = name2;
System.out.println("명시적 생성자 호출");
}
void inttro() {
System.out.println("안녕," + age + "살 " + name + "이야" );
}
}
public class Class_basic2 {
public static void main(String[] args) {
// 기본생성자로 인스턴스 생성
//명시적 생성자로 인스턴스 생성
Human hi1 = new Human();
hi1.age = 20;
hi1.name = "김다희";
// System.out.println(hi1.age);
// System.out.println(hi1.name);
hi1.inttro();
Human hi2 = new Human(90,"김다희");
// System.out.println(hi2.age2);
// System.out.println(hi2.name2);
hi2.inttro();
}
}
<출력 결과>
기본 생성자 호출 안녕,20살 김다희이야 명시적 생성자 호출 안녕,90살 김다희이야
생성자 규칙
-생성자는 이름이 클래스와 같다
-클래스 샐성시 생성자를 넣지 않아도 기본 생성자가 생성된다
=부모클래스는 자식클래스보다 먼저 생성되어야 한다
-리턴타입을 갖지 않는다
=명시적 생성자가 있으면 기본 생성자는 별도로 생성해야 한다
package chapter08.classPart;
public class User {
String name;
int age;
//자동완성 > 우클릭 source >generate constructor ...
public User() {
super();
}
public User(String name1) {
super();
name = name1;
}
public User(String name2, int age2) {
super();
name = name2;
age = age2;
}
public void userInfo() {
System.out.println("이름 " + name + ", 나이: " + age);
}
}
super();는 자바에서 클래스의 생성자에서 부모 클래스의 생성자를 호출
자바에서 모든 클래스는 기본적으로 Object 클래스를 상속받음.
Object 클래스는 모든 자바 클래스의 최상위 클래스
⇒ 각 클래스는 Object 클래스의 멤버들을 상속받아 사용할 수 있음
package chapter08.classPart;
public class Construnctor1 {
public static void main(String[] args) {
User user1 = new User();
user1.userInfo();
User user2 = new User("홍길동");
user2.userInfo();
User user3 = new User("이순신", 70);
user3.userInfo();
}
}
<출력 결과>