//定义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); |