一个例子理解java面向对象的机制

发表于:2014-8-13 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:cjings    来源:51Testing软件测试网采编

//定义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而自动调用相应的方法。
//这用到了Java的多态性。
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();
//在main()函数中测试
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);
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号