반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | /* 객체지향의 3요소 * 1. 캡슐화 : 클래스를 디자인하는것--> 타입디자인 * 2. 상속 : 클래스 사이에서의 관계 * 3. 다형성 : 부모자식관계에서 혹은 클래스간의 관계에서의 행동 */ // class 식별자 public class Person { // 객체를 정의하기위한 구조 // 속성(데이터) --> 필드, 멤버변수, 속성값 // private 멤버는 자기 자신(자기클래스)에서만 접근 가능 한것 private int age; // 나이 private String name; //이름 private int weight; //체중 // 행동(메서드) --> 다양한메서드, 멤버함수, 프로시져(리턴이없는 함수) // public은 어디서든 누구나 접근 가능한것 //생성자 public Person() { age=1; name="홍길동"; weight=3; } // 싱글톤패턴 : 생성자가 private // 메서드 오버로딩 public Person(int a, String n, int w){ age = a; name = n; weight = w; } public void bab(){ weight++; } public void jam(){ age++; } public void Show(){ System.out.println(age); System.out.println(name); System.out.println(weight); } public int getAge(){ return age; } public String getName(){ return name; } /*class 디자인패턴 1. 필드는 private으로 설정 한다. 2. 메소드는 일반적으로 public으로 설정한다. 단, 무조건은 아니다. 문제점 1. 필드가 private이면 필드값을 어떻게 초기화 시키냐? ----> 생성자를 이용한다. -->생성자 : 객체가 생성이 될때 자동으로 호출되어지는 메소드 -->객체의 필드 초기화의 역할을 수행 * 생성자의 특징 * 1) class와 이름이 동일하다. * 2) return이 없다. 프로시져. * 3) 오버로딩(다중정의) : 같은 이름의 메서드가 여러개 존재할 수 있는것. 메서드 오버로딩(다중정의) : 같은 이름의 메서드가 매개변수의 차이와 갯수, 순서에 따라 서로 다르게 인식되는것 * 4) 일부로 만들지 않아도 자동으로 생성된다. 하지만 매개변수가 있는 생성자를 만들면 자동으로 디폴트 생성자를 만들어 주지 않는다. 2. 필드가 private이면 어떻게 접근하나? public한 메서드를 통해서 접근가능하게 한다. (getter/setter --> 프로퍼티) *프로퍼티 사용이유 1. 접근권한에 대한 제어를 프로그래머가 직접할 수 있다. 2. setter의 경우 예외처리를 가능하게 한다. */ } |
* main메서드에 static이 붙는이유
- new를 써서 객체를 생성해 메모리에 올려야하지만 new를 쓰지 않고 메모리에 올리려면 static을 써야한다. 그렇기 때문에 main메서드에 static을 붙여줘야 하며 main안에서 호출하는 메서드는 모두 static이여야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | // 스타 크래프트 마린 클래스 추상화 public class CMarin { //속성 private int hp; //체력 - 인스턴스 필드 - 개인적으로 쓸때 사용 public static int att; // 공격력 - 정적필드 - 공용으로 쓸때 사용 public static int range; // 사거리 - 정적필드 // static은 따로 static영역에 생긴다. 프로그램이 시작할때 올라라고 끝날때 내려온다. public static void Attplus(){ // 스태틱으로 쓰면 객체생성없이 클래스이름으로 사용이 가능하다. att++; } //생성자 public CMarin() { // TODO Auto-generated constructor stub hp=30; att=5; range=7; } //행동 public void Move(){ System.out.println("gogogo!!!"); } public void Attack(){ System.out.println("dududududu!!!"); } public void Die(){ System.out.println("Ah~~~"); } public void getHealing(){ hp++; } public int gethp(){ return hp; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class CMedic { private int hp; // 체력 private int mana; // 치료력 public CMedic(){ hp=40; mana=40; } public void healing(CMarin marin){ while(true){ System.out.println(marin.gethp()); System.out.println(mana); if(mana==0 || marin.gethp()==40) break; else marin.getHealing(); mana--; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class CEnginering { private int pos_x; private int pos_y; public void AttUp(){ CMarin.Attplus(); } public void DefUp(){ } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class Base { public static void main(String[] args) { /* //객체의 배열 --> 마린객체가 5개 모여있는 배열 CMarin[] theMarin = new CMarin[12]; //theMarin.Attack(); for(int i=0;i<12;i++){ theMarin[i] = new CMarin(); theMarin[i].Attack(); } */ CMarin theMarin = new CMarin(); CMedic medic = new CMedic(); medic.healing(theMarin); // 마린과 메딕은 healing이라는 메시지를 주고 받는 상황이다. CMarin.Attplus(); CEnginering eng = new CEnginering(); eng.AttUp(); } } |
반응형
'(Before)BitSchool' 카테고리의 다른 글
2014/5/15 데이터베이스 - 오라클 (0) | 2014.05.15 |
---|---|
2014/5/14 데이터베이스 - Oracle (0) | 2014.05.14 |
2014/05/13 Java - Abstract추상클래스, interface 인터페이스, final, 예외처리, try, catch, throws (0) | 2014.05.13 |
2014/5/12 Java - this,상속, 다형성 (0) | 2014.05.12 |
Java 로또기계 (0) | 2014.05.08 |