//定義Gun類 public abstract class Gun { protected String name; // 帶參數的構造方法,特殊的方法,名字必須與類名相同 public Gun() { public Gun(String name) { this.name = name; // 構造抽象方法,并在子類中繼承和定義。 abstract void sound(); public String getName() { return name; public void setName(String name) { this.name = name; //Carbine繼承自Gun public class Carbine extends Gun { //帶參數的構造方法,特殊的方法,名字必須與類名相同 public Carbine(String name) { this.name = name; //Gun類下不同的子類擁有同名的sound()方法,但是內容不同,在調用sound()方法時會根據具體的Gun而自動調用相應的方法。 void sound() http://www.huiyi8.com/jiaoben/ // TODO Auto-generated method stub System.out.println("DaDaDa!"); javascript特效 //Rifle繼承自Gun public class Rifle extends Gun { //帶參數的構造方法,是特殊的方法,名字必須與類名相同 public Rifle(String name) { this.name = name; //Gun類下不同的子類擁有同名的sound()方法,但是內容不同,在調用sound()方法時會根據具體的Gun而自動調用相應的方法。 //這用到了Java的多態性。 void sound() { // TODO Auto-generated method stub System.out.println("Peng! Peng! Peng!"); //定義Person類 public class Person { private String name; public String getName() { return name; public void setName(String name) { this.name = name; // 體現多態性。 public void shoot(Person p, Gun g) { System.out.println(this.name + " shoot\t" + p.getName() + " using a " + g.getName()); g.sound(); public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person p1 = new Person(); Person p2 = new Person(); p1.setName("XiaoWang"); p2.setName("XiaoLi"); Rifle r = new Rifle("rifle"); Carbine c = new Carbine("carbine"); // 將方法的調用和實現分離,已達到封裝的效果。 p1.shoot(p2, r); p1.shoot(p2, c); |