//定義Gun類ide
public abstract class Gun {函數
protected String name;測試
// 帶參數的構造方法,特殊的方法,名字必須與類名相同ui
public Gun() {this
public Gun(String name) {spa
this.name = name;orm
// 構造抽象方法,並在子類中繼承和定義。繼承
abstract void sound();get
public String getName() {it
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而自動調用相應的方法。
//這用到了Java的多態性。
void sound() {
// TODO Auto-generated method stub
System.out.println("DaDaDa!");
//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();
//在main()函數中測試
public class Test http://www.huiyi8.com/jiaoben/
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);