제2, 3교시 유형과 대상

7294 단어 클래스대상
무엇이 클래스이고, 무엇이 대상입니까?이것은 모두가 처음에 공부할 때 가장 골치 아픈 문제다.교과서의 정의는 클래스는 추상적인 개념이고 대상은 클래스의 실례이다.그건 이해가 안 돼요.다음은 하나의 예를 통해 간단하게 설명한다.
먼저 컴퓨터는 하나의 종류이다. 왜냐하면 컴퓨터는 추상적인 개념이기 때문이다. 그것이 무엇을 추상적인 개념이라고 하는가.사실은 매우 간단하다. 컴퓨터는 하나의 통칭이다.만약 내가 너에게 컴퓨터가 얼마냐고 묻는다면, 너희들은 틀림없이 대답할 수 없을 것이다. 왜냐하면 너는 내가 구체적으로 어느 컴퓨터, 연상, 소니, 아니면 애플만 있는지 모르기 때문이다.구체적인 실례가 아니기 때문에 컴퓨터는 하나의 종류이다.만약 내가 어떤 컴퓨터가 같은 종류냐고 묻는다면?답은 틀림없이 같은 종류가 아니다.어떤 컴퓨터가 구체적으로 어떤 실례를 가리키기 때문이다.이때 내가 이 컴퓨터에 얼마냐고 물으면 너희들은 나에게 대답할 수 있다.그래서 구체적인 어떤 컴퓨터가 하나의 대상이다.
전반적으로 말하면 클래스는 범지이다. 그는 같은 속성을 가진 대상의 총칭이고 대상은 클래스의 구체적인 특지이다.
다음은 다음과 같은 몇 가지 특징을 말한다. 앞의 예를 들자.컴퓨터는 어떤 특징을 가지고 있습니까?1.가격 2.브랜드모양새...그 다음으로 컴퓨터는 또 약간의 기능을 가지고 있다.공무를 보다게임을 해서...
자바에서도 유사하다. 모든 클래스는 자신의 속성(위에서 말한 특징)을 가지고 있고 모든 클래스는 자신의 방법(위에서 말한 기능)을 가지고 있다.
클래스publicclass 클래스 이름 {속성 정의
메서드
}
예: public class Computer
     private String brand;//브랜드 속성 정의private double price;//가격 특성 정의
public void play () {...//play 방법 정의}
하나의 지식을 보충하다.자바 파일에는 하나의 공공 클래스만 있습니다. 즉, 여러 클래스가 있을 수 있지만, 앞에는 공공 클래스를 추가할 수 없습니다. 그러나 이렇게 하는 것을 권장하지 않습니다. 가장 좋은 것은 하나의 파일 클래스 (내부 클래스 제외) 입니다.
하나의 클래스를 실례화합니다: 클래스 대상 이름 = new 클래스 이름 ();        Computer com = new Computer();메소드 호출:
com.play();//플레이() 방법을 호출하면 사용법이 c 언어의 구조 유형과 비슷하고 학생들이 플레이()를 직접 사용할 수 없는 이유를 묻는다. 이것은 대상을 대상으로 프로그래밍하는 사상을 나타낸다. 구체적으로 어떤 대상이 어떤 방법을 호출했는지 알 수 있다.
구조 방법: 유형에서 일반적인 방법과 구조 방법으로 나뉜다.그 중에서 일반적인 방법은 이미 소개했으니 다음은 구조 방법을 살펴보자.구성 방법은 Student stu = new Student () 와 같이 대상을 실례화하고 초기화하는 데 사용됩니다.그 중에서 Student () 는 구조 방법으로 new를 사용할 때 무더기 (heap) 에서 메모리를 열고, 이어서 Student () 구조 방법은 개척된 메모리에 클래스의 속성과 방법을 쓰고, 마지막에stu에 주소를 되돌려줍니다.그러면 질문이 왔습니다. 어떤 학우들은 Student()가 구조 방법이지만 저는 있습니다.클래스에 이 구조 방법을 쓰지 않았는데 왜 호출할 수 있습니까?왜냐하면 자바에서 쓰기 구조 방법이 없으면 시스템이 기본적으로 구조 방법을 사용합니다.
구조 방법의 정의:public 클래스 이름 (데이터 형식 참조 이름,...){메서드...여기서 주의해야 할 것은 구조 방법에 데이터 형식이 되돌아오지 않는다는 것이다. (void를 포함해서도 안 된다.) 그리고 구조 방법이 정의되어 있다면 시스템은 기본 구조 방법을 사용하지 않는다.
방법 재부팅: 조건: 1.방법은 이름이 똑같아야 한다. 2.방법이 가지고 있는 매개 변수 형식, 개수, 순서가 완전히 같지 않습니다. 즉, 되돌아오는 값 형식은 다음과 같습니다:public void fun () {} public void fun (int a) {}//이 두 가지는 방법이 다시 불러오는 것입니다.
public void fun () {} public void fun () {}//이 두 가지는 다시 불러오는 방법이 아닙니다.
this 키워드:this는 말 그대로 이것, 즉 현재 대상을 가리킨다.
Student 클래스에 name 속성이 있는 경우 this.name은 현재 대상의name을 표시합니다.
this는 또 다른 용법이 있다
public Student(String name){ ...}
public Student(){ this(“..”);//구조방법에서this()를 사용하는 것은 현재 대상을 호출하는 또 다른 구조자를 가리킨다)}//전제는 이 구조방법이 있다는 것이다
전치와 전인용: c언어를 배운 학우들은 모두 알고 있다. 이른바 전치는 전실삼의 한 부본이고 형삼의 변화는 실삼에 영향을 주지 않는다.전송 주소는 실참에 영향을 줄 수 있다. 왜냐하면 다음 지향 실참의 주소는 실참의 값을 바꾸기 때문이다.
java에는 바늘에 대한 설명이 없지만, 인용은 바늘에 대한 설명과 유사합니다.
예를 들어 public static void main (String [] args) {Student stu = new Student (), int a = 10;fun (a, stu);
public  static void fun(int a , Student stu){ stu.setName("..");        a=19;}//이 예에서 a전은 stu전은 인용이고 fun()에서 바뀐 a는main()의 a에 영향을 주지 않으며/fun()에서 바뀐name는main()에서 stu의name에 영향을 준다.stu가 주소를 전달했기 때문에 어떤 학우들은 주소를 전달한 이상 왜 아예 전지침이라고 부르지 않고 이름을 바꾸어 전인용을 하느냐고 물어볼 수도 있다.사실 이 문제도 생각해 봤어요. c#를 배웠으면 동창회가 잘 따라가야 해요. 여기는 간단하게 소개만 할게요.c 언어의 지침은 메모리를 직접 조작하는 것이기 때문에 프로그램에 있어서 안전하지 않다. 심각하게 프로그램을 붕괴시킬 수 있다. 대상을 대상으로 하는 사상은 바로 데이터에 대한 봉인이다. 그러면 프로그램의 안전성을 높일 수 있다.그래서 지침의 사용이 대상에 대한 프로그래밍 사상에 어긋나기 때문에 자바에서는 지침의 사용을 금지했다.
실례: 영웅류와 보스류를 작성하여 쌍방의 전투를 실현한다.
public class Hero {

	private int blood;
	private int harm;
	private String name;
	/**
	 *  , name,harm,blood 
	 * @param name
	 * @param harm
	 * @param blood
	 */
	public Hero(String name,int harm,int blood){
		this.name=name;
		this.harm=harm;
		this.blood=blood;
	}
	public Hero(){
		this("",0,0);
	}
	/**
	 *  
	 * @return  
	 */
	public int getBlood() {
		return blood;
	}
	/**
	 *  , 0 , 0
	 * @param blood
	 */
	public void setBlood(int blood) {
		if(blood<0){
			this.blood=0;
		}else{
			this.blood = blood;
		}
	}
	/**
	 *  
	 * @return  
	 */
	public int getHarm() {
		return harm;
	}
	/**
	 *  
	 * @param blood
	 */
	public void setHarm(int harm) {
		this.harm = harm;
	}
	/**
	 *  
	 * @return  
	 */
	public String getName() {
		return name;
	}/**
	 *  
	 * @param blood
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 *  
	 */
	public void attack(Boss b){
		b.setBlood(b.getBlood()-harm);
	}
	
}

 
/**
 *  Boss 
 * @author chenzhaomin
 *
 */
public class Boss {

	private int blood;
	private int harm;
	private String name;
	/**
	 *  , name,harm,blood 
	 * @param name
	 * @param harm
	 * @param blood
	 */
	public Boss(String name,int harm,int blood){
		this.name=name;
		this.harm=harm;
		this.blood=blood;
	}
	public Boss(){
		this("",0,0);
	}
	/**
	 *  
	 * @return  
	 */
	public int getBlood() {
		return blood;
	}
	/**
	 *  
	 * @param blood
	 */
	public void setBlood(int blood) {
		if(blood<0){
			this.blood=0;
		}else{
			this.blood = blood;
		}
	}
	/**
	 *  
	 * @return  
	 */
	public int getHarm() {
		return harm;
	}
	/**
	 *  
	 * @param blood
	 */
	public void setHarm(int harm) {
		this.harm=harm;
	}
	/**
	 *  
	 * @return  
	 */
	public String getName() {
		return name;
	}/**
	 *  
	 * @param blood
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 *  
	 */
	public void attack(Hero h){
		h.setBlood(h.getBlood()-harm);
	}
	
}

 
import java.util.Random;

public class Fight {

	/** 
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Hero h = new Hero(" ",10,100);// Hero 
		Boss b = new Boss(" ",10,100);// Boss 
		startFight(h,b);// 
	
	}
	/**
	 *  
	 * @param h
	 * @param b
	 */
	public static void startFight(Hero h,Boss b){
		Random r = new Random();// 
		/**
		 *  , 
		 */
		while(true){
			boolean bool = r.nextBoolean();
			System.out.println(h.getName() + "HP = " + h.getBlood()  + " \t " + b.getName() + "HP = " + b.getBlood());
			if(bool){
				h.attack(b);
				if(b.getBlood()==0){
					System.out.println(h.getName() + "  win!");// 
					return ;
				}
			}else{
				b.attack(h);
				if(h.getBlood()==0){
					System.out.println(b.getName() + "  win!");// 
					return ;
				}
			}
		}
	}

}

  
총괄: 하나의 통칭과 유사하고 대상은 하나의 실례이다.대상 프로그래밍에서 어떤 대상이 어떤 방법을 사용했는지 정확히 알아야 한다

좋은 웹페이지 즐겨찾기