Do It Java Day11
클래스와 객체 2-1
1. this 예약어
- 생성된 인스턴스 스스로를 가르키는 예약어
class Birthday {
int day;
int month;
int year;
public void setYear(int year) {
this.year = year; //this를 통해 매개변수의 year가 아닌 멤버변수의 year를 나타냄을 표시
}
public void printThis() {
System.out.println(this);//인스턴스의 주소 값을 출력
}
}
public class ThisExample {
public static void main(String[] args) {
Birthday b1 = new Birthday();
Birthday b2 = new Birthday();
System.out.println(b1);
b1.printThis();
System.out.println(b2);
b2.printThis();
/*
출력 결과
Birthday@15db9742
Birthday@15db9742
Birthday@6d06d69c
Birthday@6d06d69c
*/
}
}
- 생성자에서 다른 생성자를 호출
class Person{
String name;
int age;
//this를 이용한 생성자 가져오기
public Person() {
this("이름없음", 1); //생성자 중 매개변수의 개수와 타입이 맞는 것과 자동 매핑
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1.name + p1.age);
}
}
- 자신의 주소를 반환함
class Return {
//인스턴스 주소값을 반환
public Return returnSelf() {
return this;
}
}
public class ReturnSelf {
public static void main(String[] args) {
Return re = new Return();
System.out.println(re.returnSelf());
//결과: thisex.Return@15db9742
}
}
객체 간의 협력
- 예제
//학생 클래스
public class Student {
String studentName;
int grade;
int money;
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
//학생 객체와 버스 객체 간의 협력
public void takeBus(Bus bus) {
bus.take(1000);
money -= 1000;
}
//학생 객체와 지하철 객체 간의 협력
public void takeSubway(Subway subway) {
subway.take(1500);
money -= 1500;
}
public void showInfo() {
System.out.println(studentName + "님의 남은 돈은 " + money + "원입니다.");
}
}
//버스 클래스
public class Bus {
int busNumber;
int passengerCount;
int money;
public Bus(int busNumber) {
this.busNumber = busNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showInfo() {
System.out.println("버스 " + busNumber +"번의 승객은 " + passengerCount + "명이고, 수입은 " + money + "원입니다.");
}
}
//지하철 클래스
public class Subway {
int lineNumber;
int passengerCount;
int money;
public Subway(int lineNumber) {
this.lineNumber = lineNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showInfo() {
System.out.println("지하철 " + lineNumber +"번의 승객은 " + passengerCount + "명이고, 수입은 " + money + "원입니다.");
}
}
//main구문
public class TakeTrans {
public static void main(String[] args) {
Student james = new Student("James", 5000);
Student tomas = new Student("Tomas", 5000);
Bus bus100 = new Bus(100);
james.takeBus(bus100);
james.showInfo();
bus100.showInfo();
Subway subwayGreen = new Subway(2);
tomas.takeSubway(subwayGreen);
tomas.showInfo();
subwayGreen.showInfo();
}
}