3. 다태

8845 단어 다태
테스트 클래스:
package cn.jbit.epettest;

import cn.jbit.epetshop.Dog;
import cn.jbit.epetshop.Master;
import cn.jbit.epetshop.Penguin;

/**
 *    
 * 
 * @author kyaccp
 * 
 */
public class EpetTest {

	/**
	 *     
	 * 
	 * @param args
	 *                 
	 */
	public static void main(String[] args) {
		//         
		Dog dog = new Dog("  ", 100, 0, "    ");
		//         
		Penguin penguin = new Penguin("  ", 100, 0, "Q ");
		//         
		Master master = new Master();
		master.feed(dog); //       
		master.play(dog); //       
		master.feed(dog); //       

		System.out.println();
		master.feed(penguin); //       
		master.play(penguin); //       
		master.feed(penguin); //       

	}
}

 
솔리드 클래스:
package cn.jbit.epetshop;

/**
 *    
 * 
 * @author chaoyi
 * @2013-10-17   09:25:09
 */
public abstract class Pet {
	/**
	 *       
	 */
	public Pet() {

	}

	/**
	 *       
	 * 
	 * @param name
	 *              
	 * @param health
	 *               
	 * @param love
	 *               
	 */
	public Pet(String name, int health, int love) {
		this.setName(name);
		this.setHealth(health);
		this.setLove(love);
	}

	private String name; //   

	/**
	 *     
	 * 
	 * @return   
	 */
	public String getName() {
		return name;
	}

	/**
	 *     
	 * 
	 * @param name
	 *              
	 */
	public void setName(String name) {
		this.name = name;
	}

	private int health = 100; //    

	/**
	 *      
	 * 
	 * @return    
	 */
	public int getHealth() {
		return health;
	}

	/**
	 *      
	 * 
	 * @param health
	 *               
	 */
	public void setHealth(int health) {
		if (health >= 0 && health <= 100) {
			this.health = health;
		} else {
			health = 40;
			System.out.println("      0~100  ,    40");
		}

	}

	private int love = 0; //    

	/**
	 *      
	 * 
	 * @return    
	 */
	public int getLove() {
		return love;
	}

	/**
	 *      
	 * 
	 * @param love
	 *               
	 */
	public void setLove(int love) {
		this.love = love;
	}

	/**
	 *     
	 */
	public abstract void print();

	/**
	 *       
	 */
	public abstract void eat();
}

 
 
package cn.jbit.epetshop;

/**
 *    
 * 
 * @author kyaccp
 * 
 */
public class Master {
	/**
	 *          
	 * 
	 * @param pet
	 *                
	 */
	public void feed(Pet pet) {
		pet.eat(); //       
	}

	/**
	 *       
	 * 
	 * @param pet
	 *                
	 */
	public void play(Pet pet) {
		if (pet instanceof Dog) { //         
			Dog dog = (Dog) pet;
			dog.catchingFly(); //            
		} else if (pet instanceof Penguin) { //         
			Penguin penguin = (Penguin) pet;
			penguin.swimming(); //         

		}
	}
}

 
package cn.jbit.epetshop;

/**
 *      
 * 
 * @author Administrator
 * 
 */
public class Dog extends Pet {

	private String strain; //   

	/**
	 *     
	 * 
	 * @return   
	 */
	public String getStrain() {
		return strain;
	}

	/**
	 *     
	 * 
	 * @param love
	 *              
	 */
	public void setStrain(String strain) {
		this.strain = strain;
	}

	/**
	 *       
	 */
	public Dog() {
	}

	/**
	 *       
	 * 
	 * @param name
	 *              
	 * @param health
	 *               
	 * @param love
	 *               
	 * @param strain
	 *              
	 */
	public Dog(String name, int health, int love, String strain) {
		super(name, health, love);
		this.setStrain(strain);
	}

	/**
	 *       
	 */
	public void print() {
		System.out.println("      :
" + super.getName() + ", " + super.getHealth() + ", " + super.getLove() + ", " + this.strain + "。"); } /** * */ public void eat() { int health; // if (super.getHealth() <= 95) { health = super.getHealth() + 5; if (health > 100) // 100 health = 100; super.setHealth(health);// System.out.println(" " + super.getName() + " ! 5。"); } else { System.out.println(" " + super.getName() + " ! 。"); } } /** * */ public void catchingFly() { super.setHealth(getHealth() - 10); // 10 if (getHealth() < 0) setHealth(0); super.setLove(getLove() + 5); // 5 System.out.println(" " + super.getName() + " 。"); } }

 
package cn.jbit.epetshop;

/**
 *      
 * 
 * @author Administrator
 * 
 */
public class Penguin extends Pet {

	public final static String SEX_MALE = "Q "; //   
	public final static String SEX_FEMALE = "Q "; //   
	private String sex = SEX_FEMALE; //   

	/**
	 *     
	 * 
	 * @return   
	 */
	public String getSex() {
		return sex;
	}

	/**
	 *     
	 * 
	 * @param love
	 *              
	 */
	public void setSex(String sex) {
		this.sex = sex;
	}

	/**
	 *       
	 */
	public Penguin() {
	}

	/**
	 *       
	 * 
	 * @param name
	 *              
	 * @param health
	 *               
	 * @param love
	 *               
	 * @param sex
	 *              
	 */
	public Penguin(String name, int health, int love, String sex) {
		super(name, health, love);
		this.setSex(sex);
	}

	/**
	 *       
	 */
	public void print() {
		System.out.println("      :
" + super.getName() + ", " + super.getHealth() + ", " + super.getLove() + ", " + this.sex + "。"); } /** * */ public void eat() { int health; // if (super.getHealth() <= 95) { health = super.getHealth() + 5; if (health > 100) // 100 health = 100; super.setHealth(health); // System.out.println(" " + super.getName() + " ! 5。"); } else { System.out.println(" " + super.getName() + " ! 。"); } } /** * */ public void swimming() { super.setHealth(getHealth() - 10); // 10 super.setLove(getLove() + 5); // 5 System.out.println(" " + super.getName() + " 。"); } }

멀티태스킹(Polymorphism)은 다양한 형태를 표현하는 능력을 가진 특징이다.더욱 전문화된 견해는 같은 실현 인터페이스에서 서로 다른 실례를 사용하여 서로 다른 조작을 집행한다는 것이다.
instanceof 연산자 대상인 instanceof 클래스나 인터페이스강제 유형 변환에 앞서 instanceof 연산자를 통해 대상의 실제 유형을 검사한 다음에 상응하는 강제 유형 변환을 진행하면 유형 변환 이상을 피하고 코드의 건장성을 높일 수 있다.
다중태를 통해 클래스의 코드 양을 줄일 수 있고 코드의 확장성과 유지보수성을 높일 수 있다.상속은 다태의 기초이며, 상속이 없으면 다태가 없다.
자류를 부류로 바꾸는 것을 상향 전환이라고 하는데 자동으로 유형 전환을 한다.부류를 자류로 바꾸는 것을 하향 전환이라고 하는데 반드시 강제 유형 전환을 해야 한다.
상향 전환 후 하위 클래스 특유의 방법을 방문할 수 있다.상위 클래스가 가리키는 실제 하위 클래스 유형으로 변환해야 합니다. 그렇지 않으면 유형 변환 예외 ClassCastException이 발생합니다.
instanceof 연산자는 대상이 하나의 클래스에 속하거나 인터페이스를 실현했는지 판단하는 데 사용됩니다.
instanceof 연산자는 일반적으로 강제 유형 전환과 결합하여 사용하는데 먼저 instanceof를 통해 유형 판단을 한 다음에 해당하는 강제 유형 전환을 한다.
부류를 방법으로 사용하는 형삼은 다태를 사용하는 상용 방식이다. 
개인 E-mail:[email protected]

좋은 웹페이지 즐겨찾기