Java接口多态实验(修正版带实验答案)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Waiter.callPersonEat(p1);
Waiter.callPersonEat(p2);
/*Person p[]=new Person[2];
p[0]=newChina();
p[1]=newUSA();
for(int i=0;i<2;i++)
Waiter.callPersonEat(p[i]);*/
}
}
例如,Ball类。代码如下,也是Java多态性的应用。
interface Ball{
void play();
}
class FootBall implements Ball{
public void play(){
System.out.println("play football");
}
}
class BasketBall implements Ball{
Ball b=new FootBall();//向上塑性
Player.playBall(b);
Player.playBall(new FootBall());//实参给形参赋值,向上塑性
Player.playBall(new BasketBall());//实参给形参赋值,向上塑性
}
}
4、构造方法的调用顺序
//输出教员的详细信息
public String detail() {
return "本人是教员";
}
}
public class School1 implements Introduceable{
//输出中心的详细信息
public String detail() {
return "这里是学校";
}
}
System.out.println("开始打印:");
System.out.println(content);
}
}
public interface Introduceable {
public String detail();
}
public class Teacher1implements Introduceable{
}
public void stop(){
System.out.println("stop....");
}
}
class SoundCard implements PCI{
public void start(){
System.out.println("sound start....");
}
public void stop(){
例如:下面代码Waiter类中的callPersonEat方法参数是Person 类型,所以利用向上塑性技术可以给其传参数China和USA类型。而该方法体p.eat();,利用动态邦定技术运行时候根据p引用的具体对象调用创建对象时所属类的eat方法
interface Person{
public void eat();
4、第四章课后题10,第五章课后题8
以下是部分实验的答案
1、
interface PCI{
void start();
void stop();
}
class NetWorkCard implements PCI{
public void start(){
System.out.println("send....");
System.out.println("sound stop....");
}
}
class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
}
class Assembler{
public static void main(String args[]){
NetWorkCard nc=new NetWorkCard();
SoundCard sc=new SoundCard();
mb.usePCICard(nc);
mb.usePCICard(sc);
}
}
2、读下面的程序,根据下面的分析和要求修改下面的代码。
public class Teacher1 {
}
}
public class School1 {
private Printer printer = new Printer();
//输出中心的详细信息
public String detail() {
return “这里是学校";
}
//使用打印机打印教员信息
public void print(Teacher1 t){
printer.print(t.detail());
}
//使用打印机打印学校信息
public void print(School1 s){
printer.print(s.detail());
}
}
分析:
•在这个系统中,对教师和学校都要定义print方法,若教师类和学校类增加,则print方法也要增加,修改该代码使其print方法只有 一个,且有更好的扩展性。
•再思考教员、学校属于两种不同的类型,无法通过“is-a”找到一个合适的父类,但是教员、学校都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现——这完全符合Java接口的定义,使用 Java接口改进该程序。
•根据以上分析以及下图,写出改进代码。
3、课本例题例5_10:点类Point,一个球类Ball,一个运动的球类,分析构造方法的调用顺序。
class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
}
class Assembler{
public static void main(String args[]){
MainBoard mb=new MainBoard();
实验9:接口、多态性
一、实验目的与要求
1、多态性的概念、技术基础
2、构造方法的调用顺序
3、总结接口的应用
二、内容概要
1、多态性概念
是指不同类型的对象可以响应相同的消息。从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的。
public void play(){
System.out.println("play BasketBall");
}
}
class Player{
public static void playBall(Ball b){
b.play();//实例方法调用,动态绑定
}
}
class Tester{
public static void main(String args[]){
//输出教员的详细信息
public String detail() {
return "本人是教员";
}
}
public class School1implements Introduceable{
private Printer printer = new Printer();
//输出中心的详细信息
public String detail() {
return “这里是学校";
}
//使用学校打印机打印信息
public void print(Introduceable intro){
printer.print(intro.detail());
}
}
或者:但前面代码更符合原来题意!
public interface Introduceable {
public String detail();
MainBoard mb=new MainBoard();
NetWorkCard nc=new NetWorkCard();
SoundCard sc=new SoundCard();
mb.usePCICard(nc);
mb.usePCICard(sc);
mb.usePCICard(new PCI(){
}
public class Printer {
public void print(Introduceable content) {
System.out.println("开始打印:");
System.out.println(content.detail());
}
}
public class Teacher1 implements Introduceable{
}
}
class Waiter{
static void callPersonEat(Person p){
p.eat();//实例方法调用,动态绑定
}
public static void main(String a[]){
Person p1=newChina();//向上塑性
Person p2=newUSA();//向上塑性
public void start(){
System.out.println("test start...");
}
public void stop(){
System.out.println("test stop...");
}
});
}
}
2、
public class Printer {
public void print(String content) {
1)调用基类的构造方法。这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个派生类,等等。直到抵达最深一层的派生类
2)按声明顺序调用成员初始化模块
3)调用派生构造方法
三、实验内容
1、根据下图实际生活中 接口和实现接口的图示,定义出Java代码演示装机人员在主板上插入实现主板接口的各种卡。部分代码已经给出。PCI接口:表示主板接口协议;MainBoard类:主板类;NetWorkCard类:网卡类,实现PCI接口;SoundCard:声卡类,实现PCI接口。
例如
Cat行为是吃鱼,Dog行为是吃骨头
所有的Object类的对象都响应toString()方法
2、多态性的技术基础
向上塑型技术:一个父类的引用变量可以指向不同的子类对象
动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性
3、多态性的好处
应用程序不必为每一个派生类(子类)编写功能调用,只要对基类(特别是抽象基类)或接口处理即可,“以不变应万变”,大大提高程序的可复用性。
//输出教员的详细信息
public String detail() {
return “本人是教师";
}
}
public class Printer {
public void print(String content) {
System.out.println("开始打印:");
System.out.println(content);
}
classChinaimplements Person{
public void eat(){
System.out.println("chinese use chopsticks");
}Байду номын сангаас
}
classUSAimplements Person{
public void eat(){
System.out.println("usause forks");
Waiter.callPersonEat(p2);
/*Person p[]=new Person[2];
p[0]=newChina();
p[1]=newUSA();
for(int i=0;i<2;i++)
Waiter.callPersonEat(p[i]);*/
}
}
例如,Ball类。代码如下,也是Java多态性的应用。
interface Ball{
void play();
}
class FootBall implements Ball{
public void play(){
System.out.println("play football");
}
}
class BasketBall implements Ball{
Ball b=new FootBall();//向上塑性
Player.playBall(b);
Player.playBall(new FootBall());//实参给形参赋值,向上塑性
Player.playBall(new BasketBall());//实参给形参赋值,向上塑性
}
}
4、构造方法的调用顺序
//输出教员的详细信息
public String detail() {
return "本人是教员";
}
}
public class School1 implements Introduceable{
//输出中心的详细信息
public String detail() {
return "这里是学校";
}
}
System.out.println("开始打印:");
System.out.println(content);
}
}
public interface Introduceable {
public String detail();
}
public class Teacher1implements Introduceable{
}
public void stop(){
System.out.println("stop....");
}
}
class SoundCard implements PCI{
public void start(){
System.out.println("sound start....");
}
public void stop(){
例如:下面代码Waiter类中的callPersonEat方法参数是Person 类型,所以利用向上塑性技术可以给其传参数China和USA类型。而该方法体p.eat();,利用动态邦定技术运行时候根据p引用的具体对象调用创建对象时所属类的eat方法
interface Person{
public void eat();
4、第四章课后题10,第五章课后题8
以下是部分实验的答案
1、
interface PCI{
void start();
void stop();
}
class NetWorkCard implements PCI{
public void start(){
System.out.println("send....");
System.out.println("sound stop....");
}
}
class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
}
class Assembler{
public static void main(String args[]){
NetWorkCard nc=new NetWorkCard();
SoundCard sc=new SoundCard();
mb.usePCICard(nc);
mb.usePCICard(sc);
}
}
2、读下面的程序,根据下面的分析和要求修改下面的代码。
public class Teacher1 {
}
}
public class School1 {
private Printer printer = new Printer();
//输出中心的详细信息
public String detail() {
return “这里是学校";
}
//使用打印机打印教员信息
public void print(Teacher1 t){
printer.print(t.detail());
}
//使用打印机打印学校信息
public void print(School1 s){
printer.print(s.detail());
}
}
分析:
•在这个系统中,对教师和学校都要定义print方法,若教师类和学校类增加,则print方法也要增加,修改该代码使其print方法只有 一个,且有更好的扩展性。
•再思考教员、学校属于两种不同的类型,无法通过“is-a”找到一个合适的父类,但是教员、学校都存在一个共同的方法特征:detail,它们对detail方法有各自不同的实现——这完全符合Java接口的定义,使用 Java接口改进该程序。
•根据以上分析以及下图,写出改进代码。
3、课本例题例5_10:点类Point,一个球类Ball,一个运动的球类,分析构造方法的调用顺序。
class MainBoard{
public void usePCICard(PCI p){
p.start();
p.stop();
}
}
class Assembler{
public static void main(String args[]){
MainBoard mb=new MainBoard();
实验9:接口、多态性
一、实验目的与要求
1、多态性的概念、技术基础
2、构造方法的调用顺序
3、总结接口的应用
二、内容概要
1、多态性概念
是指不同类型的对象可以响应相同的消息。从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的。
public void play(){
System.out.println("play BasketBall");
}
}
class Player{
public static void playBall(Ball b){
b.play();//实例方法调用,动态绑定
}
}
class Tester{
public static void main(String args[]){
//输出教员的详细信息
public String detail() {
return "本人是教员";
}
}
public class School1implements Introduceable{
private Printer printer = new Printer();
//输出中心的详细信息
public String detail() {
return “这里是学校";
}
//使用学校打印机打印信息
public void print(Introduceable intro){
printer.print(intro.detail());
}
}
或者:但前面代码更符合原来题意!
public interface Introduceable {
public String detail();
MainBoard mb=new MainBoard();
NetWorkCard nc=new NetWorkCard();
SoundCard sc=new SoundCard();
mb.usePCICard(nc);
mb.usePCICard(sc);
mb.usePCICard(new PCI(){
}
public class Printer {
public void print(Introduceable content) {
System.out.println("开始打印:");
System.out.println(content.detail());
}
}
public class Teacher1 implements Introduceable{
}
}
class Waiter{
static void callPersonEat(Person p){
p.eat();//实例方法调用,动态绑定
}
public static void main(String a[]){
Person p1=newChina();//向上塑性
Person p2=newUSA();//向上塑性
public void start(){
System.out.println("test start...");
}
public void stop(){
System.out.println("test stop...");
}
});
}
}
2、
public class Printer {
public void print(String content) {
1)调用基类的构造方法。这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个派生类,等等。直到抵达最深一层的派生类
2)按声明顺序调用成员初始化模块
3)调用派生构造方法
三、实验内容
1、根据下图实际生活中 接口和实现接口的图示,定义出Java代码演示装机人员在主板上插入实现主板接口的各种卡。部分代码已经给出。PCI接口:表示主板接口协议;MainBoard类:主板类;NetWorkCard类:网卡类,实现PCI接口;SoundCard:声卡类,实现PCI接口。
例如
Cat行为是吃鱼,Dog行为是吃骨头
所有的Object类的对象都响应toString()方法
2、多态性的技术基础
向上塑型技术:一个父类的引用变量可以指向不同的子类对象
动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性
3、多态性的好处
应用程序不必为每一个派生类(子类)编写功能调用,只要对基类(特别是抽象基类)或接口处理即可,“以不变应万变”,大大提高程序的可复用性。
//输出教员的详细信息
public String detail() {
return “本人是教师";
}
}
public class Printer {
public void print(String content) {
System.out.println("开始打印:");
System.out.println(content);
}
classChinaimplements Person{
public void eat(){
System.out.println("chinese use chopsticks");
}Байду номын сангаас
}
classUSAimplements Person{
public void eat(){
System.out.println("usause forks");