一、实验目的

1、理解 Java 语言的继承和多态特性;

2、掌握变量的隐藏、方法的覆盖、重载;

3、掌握抽象类和接口的使用。

二、实验要求

1、根据实验步骤中提出的要求,使用eclipse等开发工具编写相应的Java程序;

2、编译、运行自己所编写的Java程序;

3、根据编译与运行过程中所获得的错误信息修改程序直至获得正确的结果;

4、记录实验中遇到的各类问题并以及解决办法。

三、实验步骤及结果

(1)设计学生类Student。该类包含两个私有成员变量name和no(分别用于存放姓名和学号),以及两个public成员方法,分别为:

void setData(String name,String no) 用于设置姓名和学号;

void print() 用于输出姓名和学号。

(a)编写程序文件 Student.java,源代码如下:

public class Student {
private String name;
private String no;
public void setData(String name,String no){
this.name=name;
this.no=no;
};
public void print(){
System.out.println("姓名:"+name);
System.out.println("学号:"+no);
}
}

   (2)设计继承上述题目(1)的Student 类的子类Undergraduate 。子类Undergraduate不仅具有父类的成员变量name(姓名)、no(学号),还定义新成员变量academy(学院)、department (系);并重载方法void setData(String name,String no, String academy, String department) 用于设置姓名、学号、学院和系;以及重写父类中void print()方法,实现输出姓名、学号、学院和系。在main()方法中创建一个该子类对象s,接着调用相应方法设置一个学生的姓名、学号、学院和系并输出。

(a)编写程序文件 Undergraduate.java,源代码如下:

public class Undergraduate extends Student{
String academy;
String department;
public void setData(String name,String no,String academy,String department){
setData(name,no); //private只能使用方法调用
this.academy=academy;
this.department=department;
}
public void print(){
super.print(); //调用父类的print方法
System.out.println("学院:"+academy+"\n系:"+department);
}
}

(b)编译运行程序,其结果如图所示。

Test主类

public class Test {
public static void main(String[] args) {
Undergraduate s = new Undergraduate();
s.setData("SZer0","123","物联网","GK");
s.print();
}
}

​编辑

(c)使用父类Student声明一个对象变量,使用已创建的子类对象进行赋值,然后使用分类对象调用print()方法,结果跟子类对象调用print()是否有区别?为什么?

Student stu=s;

stu.print();

public class Test {
public static void main(String[] args) {
Undergraduate s = new Undergraduate();
s.setData("SZer0","123","物联网","GK");
s.print();
System.out.println("===================");
Student stu = s; //上转型
stu.print();
}
}

​编辑

(3)设计一个动物声音“模拟器”,希望“模拟器”可以模拟许多动物的叫声,要求如下:

A、编写接口Animal

该接口有2个抽象方法:cry()和getAnimalName(),即要求实现该接口的各种具体动物类给出自己的叫声和种类名称。

public interface Animal {
void cry();
void getAnimalName();
} class Dog implements Animal{
@Override
public void cry() {
System.out.println("汪汪");
} @Override
public void getAnimalName() {
System.out.println("狗狗");
}
} class Cat implements Animal{
@Override
public void cry() {
System.out.println("喵喵");
} @Override
public void getAnimalName() {
System.out.println("猫猫");
}
}

B、编写模拟器类Simulator

该类有一个playSound(Animal an)方法,该方法的参数为Animal类型,则an可以调用实现Animal接口类重写的cry()方法播放具体动物的声音,调用重写的getAnimalName()方法显示具体动物种类的名称。

public class Simulator {
void playSound(Animal an){
an.cry();
an.getAnimalName();
}
}

C、编写实现Animal接口的Dog类和Cat类。

D、编写主类Application(用户程序),在其main()方法中至少包含如下代码:

Simulator sm=new Simulator();

sm. playSound(new Dog());

sm. playSound(new Cat());

public class Test {
public static void main(String[] args){
Simulator sm=new Simulator();
sm. playSound(new Dog());
sm. playSound(new Cat());
}
}

​编辑

(c)在主类Application中使用匿名类的方式实现小鸡的叫声,源代码和执行结果如下。

public class Test {
public static void main(String[] args){
Simulator sm=new Simulator();
sm. playSound(new Dog());
sm. playSound(new Cat()); Simulator.playSound(new Animal() { //接口匿名类
@Override
public void cry() {
System.out.println("咯咯");
} @Override
public void getAnimalName() {
System.out.println("小鸡");
}
});
}
}

​编辑

四、实验小结

通过本次实验,理解 Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。

最新文章

  1. 如何使用免费PDF控件从PDF文档中提取文本和图片
  2. Android编程容易犯的错误之二
  3. 请各位帮帮忙:Android LBS应用——CityExplorer (v1.0) 调研
  4. Java replace & replaceAll
  5. MySQL的几种连接 join/inner join/cross join/逗号/left join/right join/natural join
  6. 在c#程式中配置log4net
  7. /etc/selinux/config
  8. spring mvc 多视图配置
  9. udp协议基础(转自疯狂java讲义)
  10. ASP.NET上传文件的几种方法
  11. layout_toLeftOf = “@id/XX” 提示找不到该id的控件
  12. 单片机开发——01工欲善其事必先利其器(Keil软件安装破解)
  13. July 11th, 2018. Wednesday, Week 28th.
  14. mysql并发控制之数据库锁
  15. Kafka-python 客户端导致的 cpu 使用过高,且无法消费消息的问题
  16. C语言常见易错题集(分析及解答)(仅可用于交流,勿用于商业用途)
  17. leetcode8:字符串转整数 (atoi)
  18. That Nice Euler Circuit(LA3263+几何)
  19. css selectors tips
  20. UWA 转载

热门文章

  1. 使用FTP协议的主机必须设置xftp版本1.2...
  2. Day21:尝试脱离相同ip连接
  3. 杂:python_windows标准输出带颜色
  4. git技能树总结
  5. 从零搭建hadoop集群之系统管理操作
  6. Ubuntu22 vim配置
  7. CUDA的新功能
  8. 从各种点理解Unity中的协程
  9. MVP模式(转)
  10. 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)