实验二 继承与接口实验
- 格式:doc
- 大小:81.00 KB
- 文档页数:7
继承与接口实验报告
实验目的:掌握Java中继承与接口的基本概念和使用方法,能够灵活运用继承和接口设计类和实现多态。
实验环境:Java语言编译器和JDK环境。
实验步骤:
1. 创建一个父类Animal,包含属性name和age,以及方法eat()和sleep()。
2. 创建两个子类Cat和Dog,继承自Animal类。
在子类中重写父类的方法,并添加特有的方法和属性。
3. 创建一个接口Jumpable,包含方法jump()。
4. 在Cat类中实现Jumpable接口,使其具有跳跃的能力。
5. 创建一个测试类Test,通过实例化Cat和Dog对象,调用它们的方法进行测试。
实验结果:
1. 父类Animal成功创建,子类Cat和Dog成功继承父类,并添加特有的方法和属性。
2. 接口Jumpable成功创建,并被Cat类实现。
3. 测试类Test成功实例化Cat和Dog对象,并调用它们的方法进行测试。
实验结论:
1. 继承是Java中实现代码重用的重要手段,通过继承可以快速创建具有相似特性的子类。
2. 接口是Java中实现多态的重要手段,通过接口可以使类具有更多的行为特性。
3. 在实际开发中,应根据需求灵活运用继承和接口,设计出合理的类结构和实现多态的方式。
班级:姓名:学号:成绩实验二Java面向对象技术——必做实验目的:1.理解继承的概念2.掌握继承的实现3.理解继承中的覆盖现象4.理解抽象类的概念,掌握定义抽象类的方法和应用5.掌握接口的定义和实现接口的方法实验数据记录及分析(或程序及运行结果)1.按照要求完成程序:1)第一个类是图形类(Shape),含有一个成员变量color(字符串类型),一个没有参数的构造方法,以及一个有一个字符串类型参数的构造方法来初始化颜色变量,还有一个返回颜色变量值的成员方法getColor,一个toString()方法,以及一个抽象方法getArea获取面积,返回值为double类型;2)第二个类是圆形类(Circle)继承自图形类,含有一个成员变量半径r,有一个有两个参数的构造方法,来初始化颜色和半径,一个toString()方法,一个方法getArea,返回值为double,获取圆的面积值。
3)第三个类是矩形类(Rectangle)继承自图形,含有两个double类型的成员变量长a和宽b,有一个有三个参数的构造方法,来初始化颜色、长和宽,一个toString()方法,一个方法getArea,返回值为double,获取矩形的面积值。
、4)第四个类是测试类(TestShape),声明一个图形引用变量,分别指向圆形类和矩形类的实例对象,并用toString方法和getArea方法来测试方法的“多态性”(由动态绑定引起)。
2.根据要求完成程序:1)定义名称为PCI的接口,包括启动的方法start和关闭的方法stop;2)定义名称为NetworkCard 的类表示网卡,实现PCI接口,并且其在实现start方法时输出“sending data……”,在实现stop方法时输出“network stop.”3)定义名称为SoundCard 的类表示声卡,实现PCI接口;并且其在实现start方法时输出“dudu……”,在实现stop方法时输出“sound stop.”4)定义名称为MainBoard 的类表示主板,包含方法public voidusePCICard(PCI p),在方法体内通过p来启动和关闭组件5)定义一个包含main方法的Test类,在main方法内创建一个MainBoard 对象用mb来引用,创建一个NetworkCard对象用nc来引用,创建一个SoundCard对象用sc来引用,分别通过mb来使用usePCICard(PCI p)启动声卡和网卡。
最新实验二继承机制实验报告实验目的:本实验旨在探究二继承机制在面向对象编程中的应用和实现,通过具体的编程实践,理解多重继承的概念,掌握如何在现代编程语言中实现二继承,并分析其优缺点以及可能遇到的问题。
实验环境:- 编程语言:Python 3.8- 开发环境:PyCharm 2021- 操作系统:Windows 10实验内容:1. 设计一个基本的类层次结构,包含两个父类和一个子类,子类需要从两个父类继承属性和方法。
2. 实现二继承,确保子类能够访问和重写父类的属性和方法。
3. 通过实例化子类,测试继承后的属性和方法的正确性。
4. 分析二继承在代码重用和系统设计中的优势和潜在的问题。
实验步骤:1. 定义两个父类`ClassA`和`ClassB`,分别具有不同的属性和方法。
2. 创建一个子类`ClassC`,继承自`ClassA`和`ClassB`。
3. 在`ClassC`中重写父类的方法,以展示多态性。
4. 编写测试代码,创建`ClassC`的实例,并调用其继承和重写的方法。
5. 记录实验结果,并对比预期和实际输出。
实验结果:- `ClassC`成功继承了`ClassA`和`ClassB`的属性和方法。
- 重写的方法在`ClassC`的实例中按预期工作,展示了多态性。
- 测试代码中所有的调用均返回了正确的结果。
实验分析:二继承机制允许子类继承多个父类的属性和方法,这在某些情况下可以提高代码的复用性,使得类的设计更加灵活。
然而,它也可能导致一些问题,如菱形继承问题,其中两个父类继承自一个共同的基类,可能会导致歧义和初始化顺序的复杂性。
此外,多重继承也可能使得类的继承关系变得复杂,难以理解和维护。
结论:通过本次实验,我们成功实现了二继承机制,并通过实际测试验证了其功能。
二继承提供了一种有效的方式来组合多个类的属性和行为,但开发者在使用时需要注意避免继承结构过于复杂,以及可能出现的菱形继承问题。
在设计类时,应当权衡二继承带来的便利性和可能引入的复杂性。
南京理工大学泰州科技学院实验报告书课程名称:《Java 面向对象程序设计》实验题目:实验四继承与接口班级:09计算机(2)学号:0909030218姓名:尤源指导教师:李丛一、实验目的1.掌握Java语言的类的继承的概念。
2.掌握Java语言中抽象类的使用。
3.掌握Java语言中接口的使用4.掌握eclipse集成开发环境的使用。
二、实验内容1.类的继承,具体要求如下:(1)定义一Person类,该类具有属性人名、年龄、身份证号等信息以及将属性信息作为字符串返回的一方法;(2)定义一Student类,让该类继承Person类,该类除了具有属性人名、年龄、身份证号等信息以外还有学号,所在学校等信息;该类也具有将属性信息作为字符串返回的一方法;(3)编写测试类,测试这两个类2.定义一个动物抽象类Animal,该类有一个抽象的方法cry();定义一个小猫类Cat,该类继承了Animal类并实现了cry()方法,当调用cry()方法时打印“小猫喵喵叫”,定义一个小狗类Dog,该类也继承了Animal类并实现了cry()方法,当调用cry()方法时打印“小狗汪汪叫”。
3. 接口的运用。
定义一接口接口名叫Usb,该接口声明了两个方法分别为start()和stop()方法,定义一U 盘类UsbDiskWriter,一照相机类Camera、一手机类Mobile,让它们都实现该接口。
三、实验步骤实验(1)编写代码实验(2)编写代码实验(3)编写代码四、实验结果实验(1)运行结果实验(2)运行结果实验(3)运行结果五、结果分析1. 子类若想调用父类的构造函数必须要用super关键字。
2.接口体中只能运用抽象类。
3.在同一个java文件中只能在入口函数的类中用public。
实验二继承与接口一、实验目的1.掌握类的继承机制。
2.熟悉类中成员变量和方法的访问控制。
3.掌握接口与包的使用,熟悉方法的多态性。
二、实验内容1.定义父类及子类,在子类中重写父类的方法2.练习接口与包的使用三、.实验步骤与要求第1题继承编写一个Java应用程序,除了主类外,该程序中还有4个类:People, ChinaPeople, AmericanPeople 和 BeijingPeople类。
此四个类的继承关系如下图所示:要求ChinaPeople,American类均重写其父类People类的speakHello, averageHeight, averageWeight方法,BeijingPeople类重写其父类ChinaPeople类的speakHello, averageHeight, averageWeight方法。
源代码:package people;class people{protected double height ;protected double weight ;public void speakHello() //问候语的函数{System.out.println("hello");}public void averageHeight()//人们的平均身高{height=170;System.out.println(+height);}public void averageWeight()//人们的平均体重{ weight=120;System.out.println(+weight);}}class Chinapeople extends people{public void speakHello(){System.out.println("你好");}public void averageHeight(){height=172;System.out.println(+height);}public void averageWeight(){ weight=115;System.out.println(+weight);}public void chinaGongfu()//中国功夫的方法{System.out.println("中国功夫");}}class Americanpeople extends people{public void speakHello(){System.out.println("hello");}public void averageHeight(){height=180;System.out.println(+height);}public void averageWeight(){ weight=150;System.out.println(+weight);}public void americanBoxing()//美国拳击的方法{System.out.println("americanBoxing");}}class Beijingpeople extends Chinapeople{public void speakHello(){System.out.println("北京欢迎你");}public void averageHeight(){height=168;System.out.println(+height);}public void averageWeight(){ weight=125;System.out.println(+weight);}}class Example{public static void main(String []args){people p =new people();Chinapeople c=new Chinapeople();Americanpeople a=new Americanpeople(); Beijingpeople b=new Beijingpeople();p.averageHeight();p.averageWeight();p.speakHello();c.averageHeight();c.averageWeight();c.chinaGongfu();c.speakHello();a.averageHeight();a.averageWeight();a.americanBoxing();a.speakHello();b.averageHeight();b.averageWeight();b.speakHello();}}结果截图:第2题上转型对象要求有一个abstract类,类名为Employee。
应用数学学院专业1 班、学号_ _姓名___ __ 教师评定_________________实验题目继承与接口一、实验目的与要求实验目的:1、掌握类的继承关系。
2、掌握接口的定义与使用。
实验要求:按下列要求编写Java程序:1、定义接口Printx,其中包括一个方法printMyWay(),这个方法没有形参,返回值为空。
2、编写矩形类,矩形类要求实现Printx接口,有求面积、求周长的方法,printMyWay()方法要能显示矩形的边长、面积和周长。
3、编写正方形类作为矩形类的子类,正方形类继承了矩形类求面积和周长的方法,新增加求对角线长的方法,重写printMyWay()方法,要求该方法能显示正方形的边长、面积、周长和对角线长。
二、实验方案编辑该实验源程序如下:■LISTEN.javainterface Printx{ //定义接口public abstract void printMyWay();}class Rectangle implements Printx{ //矩形类double a,b;Rectangle(double a,double b){this.a=a;this.b=b;}public double getArea(){return a*b;}public double getLength(){return (a+b)*2.0;}public void printMyWay(){System.out.println("该矩形的长a="+a+"宽b="+b);System.out.println("面积s="+getArea());System.out.println("周长l="+getLength());}}class Square extends Rectangle{ //正方形类double c;Square(double a,double b){super(a,b);}public double getDiagonal(){c=Math.sqrt(a*a+b*b);return c;}public void printMyWay(){System.out.println("该矩形的长a="+a+"宽b="+b);System.out.println("面积s="+getArea());System.out.println("周长l="+getLength());System.out.println("对角线d="+getDiagonal());}}public class LISTEN {public static void main(String[] args) {Rectangle rectangle;Square square;rectangle=new Rectangle(11,5);square=new Square(5,5);rectangle.printMyWay();square.printMyWay();}}三、实验结果和数据处理运行上述源程序,可得如下运行结果:1、矩形长a=11 宽b=52、矩形长a=5 宽b=5四、结论接口是Java实现部分多继承功能的体现。
实训继承与接口2一、实训目标理解对象的上转型对象,以及多态的目的和意义,掌握多态的常用形式。
理解抽象类的意义和实际应用的一般模式,熟练掌握抽象类和抽象方法的定义以及抽象类的继承,尤其是子类是非抽象类的情况。
二、实训内容1、请按模板要求,将【代码】替换为Java程序代码。
Parent.javaabstract class Parent{abstract void grow();}Son.javaclass Son extends Parent{void grow(){System.out.println("son:我比父亲成长条件好一点!"); //重写grow()方法,输出”son:我比父亲成长条件好一点!”}void play(){System.out.println("我会踢球");}}Daughter.javaclass Daughter extends Parent{void grow(){System.out.println("daughter:我比父亲成长条件好很多!"); //重写grow ()方法,输出”daughter:我比父亲成长条件好很多!”}void dance(){System.out.println("我会跳舞");}}MyTest.javapublic class MyTest {public static void main(String[] args) {Parent p=new Son(); //将p设为为子类Son的上转型对象p.grow(); //调用重写父类中的grow()方法//p.play(); 这里会报错,因为不能调用子类新增的play()方法Son s=(Son)p; //将上转型对象进行强制转化为子类Son的对象s.play(); //调用子类中的方法Parent p2=new Daughter(); //将p设为为子类Daughter的上转型对象p2.grow(); //调用重写父类中的grow()方法Daughter d=(Daughter)p2; //将p进行强制转化为Daughter的对象d.dance(); //调用Daughter类中的dance()方法}}2、编程题【实验-继承与接口1】(1)设计一个形状类Shape,包含一个getArea()方法,该方法不包含实际语句。
实验二继承与接口一、实验目的1.掌握类的继承机制。
2.熟悉类中成员变量和方法的访问控制。
3.掌握接口与包的使用,熟悉方法的多态性。
二、实验内容1.定义父类及子类,在子类中重写父类的方法2.练习接口与包的使用三、.实验步骤与要求第1题继承编写一个Java应用程序,除了主类外,该程序中还有4个类:People, ChinaPeople, AmericanPeople 和BeijingPeople类。
此四个类的继承关系如下图所示:要求ChinaPeople,American类均重写其父类People类的speakHello, averageHeight, averageWeight方法,BeijingPeople类重写其父类ChinaPeople类的speakHello, averageHeight, averageWeight方法。
源代码:package people;class people{protected double height ;protected double weight ;public void speakHello() //问候语的函数{System.out.println("hello");}public void averageHeight()//人们的平均身高{height=170;System.out.println(+height);}public void averageWeight()//人们的平均体重{ weight=120;System.out.println(+weight);}}class Chinapeople extends people{public void speakHello(){System.out.println("你好");}public void averageHeight(){height=172;System.out.println(+height);}public void averageWeight(){ weight=115;System.out.println(+weight);}public void chinaGongfu()//中国功夫的方法{System.out.println("中国功夫");}}class Americanpeople extends people{public void speakHello(){System.out.println("hello");}public void averageHeight(){height=180;System.out.println(+height);}public void averageWeight(){ weight=150;System.out.println(+weight);}public void americanBoxing()//美国拳击的方法{System.out.println("americanBoxing");}}class Beijingpeople extends Chinapeople{public void speakHello(){System.out.println("北京欢迎你");}public void averageHeight(){height=168;System.out.println(+height);}public void averageWeight(){ weight=125;System.out.println(+weight);}}class Example{public static void main(String []args){people p =new people();Chinapeople c=new Chinapeople(); Americanpeople a=new Americanpeople(); Beijingpeople b=new Beijingpeople();p.averageHeight();p.averageWeight();p.speakHello();c.averageHeight();c.averageWeight();c.chinaGongfu();c.speakHello();a.averageHeight();a.averageWeight();a.americanBoxing();a.speakHello();b.averageHeight();b.averageWeight();b.speakHello();}}结果截图:第2题上转型对象要求有一个abstract类,类名为Employee。
Employee的子类有YearWorker,MonthWorker和WeekWorker。
YearWorker按年领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。
Employee类有一个abstract方法:public abstract earnings();子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。
有一个Company类,该类用employee数组作为成员,employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。
程序能输出Company对象一年需要支付的薪水总额。
源代码:package people;abstract class Employee{int salary;public abstract void earnings();}class YearWorker extends Employee{public void earnings(){ salary=200;System.out.println("年薪:" +salary*365);}}class MonthWorker extends Employee{public void earnings(){ salary=100;System.out.println("月薪:"+salary*30+" 一年薪水: "+salary*30*12);}}class WeekWorker extends Employee{public void earnings(){ salary=80;System.out.println("周薪:"+salary*7+" 一年薪水: "+salary*365);}}public class Company{ public static void main(String []args){Employee e[]=new Employee[3];e[0]=new YearWorker();e[0].earnings();e[1]=new MonthWorker();e[1].earnings();e[2]=new WeekWorker();e[2].earnings();}}结果截图:第3题接口回调要求有一个ComputeTotalSales接口,该接口中有一个方法:public double totalSalesByYear(),有三个实现该接口的类:Television,Computer和Mobile。
这三个类通过实现接口computeTotalSales,给出自己的年销售额。
有一个Shop类,该类用computeTotalSales数组作为成员,computeTotalSales 数组的单元可以存放Television对象的引用、Computer对象的引用或Mobile对象的引用。
程序能输出Shop对象的年销售额。
源代码:package people;interface ComputeTotalSales{public double totalSalesByYear();}class Television implements ComputeTotalSales{public double totalSalesByYear(){double sale=100;return sale*365;}}class computer implements ComputeTotalSales{public double totalSalesByYear(){double sale=200;return sale*365;}}class Mobile implements ComputeTotalSales{public double totalSalesByYear(){double sale=220;return sale*365;}}public class shop {public static void main(String []args){ComputeTotalSales c[];c=new ComputeTotalSales[3];c[0]=new Television();System.out.println("电视机的年销售量:"+c[0].totalSalesByYear());c[1]=new computer();System.out.println("电脑的年销售量:"+c[1].totalSalesByYear());c[2]=new Mobile();System.out.println("手机的年销售量:"+c[2].totalSalesByYear());}}结果截图:四、实验结果编写源程序并上机调试通过,根据实验过程填写实验报告。
提交电子版实验报告要求:1、源代码要规范、有详细的注释;每题以文件夹管理各个Java源文件;2、运行结果截图+心得体会(实验报告)。
打包命名:“学号姓名java实验几”:如“2012085111小明java实验二”。