오늘은 getter/setter에 대해 좀 더 알아보고 스태틱에 대해서 공부해보겠습니다.
//Bus.java
public class Bus {
String num;
int money;
int count;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money += money; //setMoney(1000)을 하면 money += 1000이 된다
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count += count; //setCount(1)을 하면 count +=1이 된다
}
}
//Subway.java
public class Subway {
String name;
int money;
int count;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money += money; //setMoney(1000)을 하면 money += 1000이 된다
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count += count; //setCount(1)을 하면 count +=1이 된다
}
}
//Student.java
public class Student {
String name; // 학생의 이름 변수
int money; // 학생의 가진돈의 변수
Bus b; // 학생이 어떤 버스를 이용하는지 정보등록을 위해 선언
// 여기서 버스 객체를 생성하면 버스 번호는 같아도 다른 버스가 된다
// 버스를 타는 학생은 버스 정보를 알고있어야 하기 때문에 선언한다
Subway s;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void run(Object o) { //Object 객체의 시조. 모든 파생 객체를 담을 수 있다
if (o instanceof Bus) { // instanceof 받아온 매개변수가 버스 타입인지 확인한다.
this.money -= 1000; // 학생의 돈이 1000원 차감된다
this.b = (Bus) o; // 명시적 형변환
// 들어온 객체가 가지고 있는 학생 정보를 타고가는 버스 객체에게 전달한다
b.setCount(1); // 버스 count에 1을 추가한다
b.setMoney(1000);// 버스 돈에 1000을 추가한다
}
else if(o instanceof Subway) { // 받아온 매개변수가 서브웨이인지 확인한다
this.money -= 1000; // 학생의 돈이 1000원 차감된다.
this.s = (Subway)o; // 받아온 매개변수 타입의 정보를 서브웨이로 전달한다
s.setMoney(1000); // 지하철 money에 1000을 추가한다
s.setCount(1); //지하철 count에 1을 추가한다.
}
}
}
//main.java
public class Main {
public static void main(String[] args) {
Student s1 = new Student(); //학생의 객체를 생성하고
s1.setName("hi"); //학생의 이름을 추가하고
s1.setMoney(10000); // 학생의 돈을 추가한다.
Bus b1 = new Bus(); // 버스의 객체를 생성하고
b1.setNum("a"); // 버스의 이름을 추가한다.
s1.run(b1); // 학생 클래스에 메소드를 실행하고 버스 객체를 전달한다
System.out.println(s1.getName() + "는 " + b1.getNum() + "버스를 탔습니다"); // 학생의 이름과 버스의 이름을 가지고 온다
System.out.println("요금을 1000원 지불하여 " + s1.getName() + "의 잔액은 " + s1.getMoney() +" 입니다"); // 학생의 이름과 잔액을 가지고 온다
System.out.println(b1.getNum() + "은 잔액 " + b1.getMoney() +"이고 사람은" + b1.getCount() + " 입니다" ); // 버스의 이름과 잔액, 사람수를 가지고 온다
Subway sw1 = new Subway(); // 서브웨이 객체를 생성하고
sw1.setName("z"); //서브웨이의 이름을 설정한다
s1.run(sw1); // 학생 클래스의 run메소드를 실행하고 서브웨이 객체를 전달한다
System.out.println(s1.getName() + "는 " + sw1.getName() + "지하철을 탔습니다"); // 학생의 이름과 지하철의 이름을 가지고 온다
System.out.println("요금을 1000원 지불하여 " + s1.getName() + "의 잔액은 " + s1.getMoney() +" 입니다"); // 학생의 이름과 잔액을 가지고 온다
System.out.println(sw1.getName() + "은 잔액 " + sw1.getMoney() +"이고 사람은" + sw1.getCount() + " 입니다" ); // 지하철의 이름과 잔액, 사람수를 가지고온다
}
}
객체 생성 전의 메모리의 올라가는 값이다 . 메모리에 한번 할당되어 프로그램이 종료될때 해제되는 변수로, 여러개의 객체에서 공유가 가능하다
//Student.java
public class Student {
String name; // 학생의 이름 변수
static int money; // 학생의 가진돈의 변수 static으로 선언해서 다른 클래스에서도 사용할 수있게 해준다
Bus b; // 학생이 어떤 버스를 이용하는지 정보등록을 위해 선언
// 여기서 버스 객체를 생성하면 버스 번호는 같아도 다른 버스가 된다
// 버스를 타는 학생은 버스 정보를 알고있어야 하기 때문에 선언한다
Subway s;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void run(Object o) { //Object 객체의 시조. 모든 파생 객체를 담을 수 있다
if (o instanceof Bus) { // instanceof 받아온 매개변수가 버스 타입인지 확인한다.
//this.money -= 1000; // 학생의 돈이 1000원 차감된다 <-this를 지워준다
this.b = (Bus) o; // 명시적 형변환
// 들어온 객체가 가지고 있는 학생 정보를 타고가는 버스 객체에게 전달한다
b.setCount(1); // 버스 count에 1을 추가한다
b.setMoney(1000);// 버스 돈에 1000을 추가한다
}
else if(o instanceof Subway) { // 받아온 매개변수가 서브웨이인지 확인한다
//this.money -= 1000; // 학생의 돈이 1000원 차감된다. <-this를 지워준다
this.s = (Subway)o; // 받아온 매개변수 타입의 정보를 서브웨이로 전달한다
s.setMoney(1000); // 지하철 money에 1000을 추가한다
s.setCount(1); //지하철 count에 1을 추가한다.
}
}
}
//Bus.java
public class Bus {
String num;
int money;
int count;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money += money;
Student.money -= 1000; 학생 클래스의 머니 변수를 가지고와서 버스가 setmoney해서 1000원 추가될때마다 학생의 잔액도 1000원 감소된다.
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count += count; //setCount(1)을 하면 count +=1이 된다
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(s1.stuNum);
//The static field Student.stuNum should be accessed in a static way
//정적 필드 Student.stuNum은 정적방식으로 액세스해야한다
//스태틱 변수는 객체로 접근하지 않는다
Student s2 = new Student();
System.out.println(s2.stuNum);
Student s3 = new Student();
System.out.println(s3.stuNum);
/// 1,1,1씩 출력된다.
Student s1 = new Student();
System.out.println(Student.stuNum);
Student s2 = new Student();
System.out.println(Student.stuNum);
Student s3 = new Student();
System.out.println(Student.stuNum);
Student s4 = new Student();
System.out.println(Student.stuNum);
Student s5 = new Student();
System.out.println(Student.stuNum);
//1,2,3,4,5가 출력된다.
//static 변수는 값이 공유된다
}
}
class Student {
// static int stuNum;
int stuNum;
public Student() {
++stuNum;
}
}
public class Main {
int num = 10;// 멤버 변수.
static int number = 100;// 객체 생성 이전에 있으므로 어디서든 편하게
// 공유라는 성격은 객체 지향에 반대 되므로 주의.
public static void main(String[] args) {
Main m = new Main();// 객체 변수.
int a = 20;// 지역변수.메소드 내에서 선언하고 메소드 사용이 끝나면 소멸.
m.outPut2(20);// 일부러 다른 메소드로 전달한 경우.
System.out.println(m.num);
System.out.println(Main.number);
}
public void outPut() {
System.out.println(Main.number);
}
public void outPut2(int num5) {
System.out.println(num5);
System.out.println(Main.number);
}
}