抽象类程序设计

一、实验目的

1.了解抽象类的概念、特征、作用

2.掌握抽象类的使用

3.掌握向上转型的用法

二、实验硬、软件环境

Windows计算机和Eclipse软件

三、实验内容及步骤

1. 升级电子宠物系统,将Pet定义为抽象类,并把print方法定义为抽象方法,再次实现宠物的领养和玩耍。

 代码及运行结果如下:

父类:package 实验八;
public  abstract class Pet {
	      public abstract void name();
	      public abstract void health();
	      public abstract void love();
	      public abstract void print();	}
子类:
宠物狗:package 实验八;
public class Dog extends Pet{
	public void name() {
		System.out.print("宠物的自我介绍:\n我的名字是:小小");}
	public void health() {
		System.out.print("  健康值是:99");}
	public void love() {
		System.out.print("  和主人的亲密度是:80");}
	public void print() {
		System.out.print("  陪主人玩耍");}}
宠物企鹅:
package 实验八;
public class Penguin extends Pet{
	public void name() {
		System.out.print("宠物的自我介绍:\n我的名字是:泡芙");	}
	public void health() {
		System.out.print("  健康值是:96");	}
	public void love() {
		System.out.print("  和主人的亲密度是:85"); }
	public void print() {
		System.out.print("  陪主人玩耍");}}
宠物金刚狼:
package 实验八;
public class Wolf extends Pet{
	public void name() {
		System.out.print("宠物的自我介绍:\n我的名字是:金刚");	}
	public void health() {
		System.out.print("  健康值是:89");}
	public void love() {
		System.out.print("  和主人的亲密度是:87");}
	public void print() {
		System.out.print("  陪主人玩耍");}}
测试类:
package 实验八;
import java.util.Scanner;
public class test1 {
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			Scanner sc =new Scanner(System.in);
			System.out.println("**************************"); 
			System.out.println("宠物领养系统");
	System.out.println("领养类型:\n1.宠物狗\n2.宠物企鹅\n3.宠物金刚狼");
			System.out.println("**************************");
			System.out.println("请选择:");
			int n =sc.nextInt();
			if(n==1) {
				System.out.println("宠物狗");
				Dog d = new Dog();
				d.name();
				d.health();
				d.love();
				d.print();
			}else if(n==2){
				System.out.println("宠物企鹅");
				Penguin p = new Penguin();
				p.name();
				p.health();
				p.love();
				p.print();
			}else if(n==3){
				Wolf w = new Wolf();
				w.name();
				w.health();
				w.love();
				w.print();
	}else if(n>3) {
		System.out.println("输入领养类型错误,请重新输入");}}}

2.尝试创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法。

代码及运行结果如下:

父类:
package 实验八;
public class father {
	public void name() {
		System.out.print("大儿子");}
	public void height() {
		System.out.print("  身高:");}}
子类:
package 实验八;
public class son extends father{
	public void height() {
		System.out.println("  身高:190");}
测试类:
package 实验八;
public class test2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		father a1 = new son();
		a1.name();
		a1.height();}}

 

 3.尝试创建一个父类和子类,分别创建构造方法,然后向父类和子类添加成员变量和方法,并总结构建子类对象时的顺序。

父类:
package 实验八;
public class fu {
	private String name;
	private char sex;
	private int age;
		public fu() {
			System.out.println();}
		public fu(String name,char sex,int age) {
			this.name = name;
		this.sex = sex;
			this.age = age;}
		public String getName() {
			return name;}
		public void setName(String name) {
			this.name = name;}
		public char getSex() {
			return sex;}
		public void setSex(char sex) {
			this.sex = sex;}
		public int getAge() {
			return age;}
		public void setAge(int age) {
			this.age = age;}
		void show() {
			System.out.print("相亲相爱一家人家庭成员介绍:
\n我的姓名为"+getName()+
					",  性别为"+getSex()+
					",  年龄为"+getAge());}	}
子类:
package 实验八;
public class zi extends fu{
	private String habby;
	public zi() { }
	public String getHabby() {
		return habby;}
	public void setHabby(String habby) {
		this.habby = habby;}
	void show() {
		super.show();
		System.out.println(",  爱好为"+getHabby());
System.out.println("构建子类对象时的顺序: \n父类静态成员"
				     + "-->子类静态成员-->父类非静态成员"
				     + "-->父类构造函数-->子类非静态成员\n-->子类构造函数");
}	}
测试类:
package 实验八;
public class test3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
			zi z = new zi();
			z.setName("大壮");
			z.setSex('男');
			z.setAge(21);
			z.setHabby("跑步");
			z.show();}}

 四、实验结果及分析

1.第一个实验中需要把Pet定义为抽象类,其必须在类前用abstract关键字修饰,抽象类不能被实例化,不能用new关键字去产生对象;抽象类被子类继承,子类必须实现抽象方法;包含抽象方法的类肯定是抽象类,但抽象类中不一定包含抽象方法。

2.第二个实验中需将其子类向上转型到父类并调用子类中的方法,实验通过“father a1 = new son();”得以实现向上转型,此处父类对象可以是接口、抽象类或具体类。

3.构建子类对象时的顺序父类静态成员子类静态成员父类非静态成员父类构造函数子类非静态成员子类构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值