实验11-类继承与接口(三)实验报告
java实验报告——继承与接口

System.out.print('\t'+"平均分");
System.out.println('\t'+"成绩等级");
for(int i=0; i<pg.length;i++) {
System.out.print(pg[i].Name); System.out.print('\t'+pg[i].Stu_type); System.out.print('\t'+String.valueOf(pg[i].C_score)); System.out.print('\t'+String.valueOf(pg[i].English_score)); System.out.print('\t'+String.valueOf(pg[i].Java_score)); System.out.print('\t'+String.valueOf(pg[i].score)); System.out.println('\t'+pg[i].sco_Level); } System.out.println(); } }
String Name=""; String Stu_type=""; int C_score; int English_score; int Java_score; int score; // String sco_Level=""; Sco_Level sco_Level;
public Student(String name,String stu_type,int sco1,int sco2,int sco3) {
java实验报告 类的继承

java实验报告类的继承一、实验目的1、深入理解 Java 中类的继承概念和机制。
2、掌握通过继承实现代码复用和功能扩展。
3、学会使用 super 关键字和方法重写。
二、实验环境1、操作系统:Windows 102、开发工具:Eclipse 或 IntelliJ IDEA三、实验内容1、创建一个父类`Animal`包含属性:`name`(字符串类型),`age`(整数类型)包含方法:`eat()`(打印出动物正在吃东西),`sleep()`(打印出动物正在睡觉)2、创建子类`Dog` 继承自`Animal`新增属性:`breed`(字符串类型,表示狗的品种)重写父类的`eat()`方法,打印出狗吃东西的特有方式新增方法:`bark()`(打印出狗在叫)3、创建子类`Cat` 继承自`Animal`新增属性:`color`(字符串类型,表示猫的颜色)重写父类的`sleep()`方法,打印出猫睡觉的特有姿势新增方法:`meow()`(打印出猫在叫)四、实验步骤1、在 Java 项目中创建一个名为`Animal` 的类:```javapublic class Animal {private String name;private int age;public Animal(String name, int age) {thisname = name;thisage = age;}public void eat(){Systemoutprintln(name +" is eating");}public void sleep(){Systemoutprintln(name +" is sleeping");}}```2、创建一个名为`Dog` 的类继承自`Animal`:```javapublic class Dog extends Animal {private String breed;public Dog(String name, int age, String breed) {super(name, age);thisbreed = breed;}@Overridepublic void eat(){Systemoutprintln(supergetName()+" the "+ breed +" dog is eating greedily");}public void bark(){}}```3、创建一个名为`Cat` 的类继承自`Animal`:```javapublic class Cat extends Animal {private String color;public Cat(String name, int age, String color) {super(name, age);thiscolor = color;}@Overridepublic void sleep(){Systemoutprintln(supergetName()+" the "+ color +" cat is sleeping curled up");}public void meow(){}}```4、在`Main` 类中进行测试:```javapublic class Main {public static void main(String args) {Dog dog = new Dog("Buddy", 3, "Labrador");dogeat();dogbark();dogsleep();Cat cat = new Cat("Mimi", 2, "White");cateat();catsleep();catmeow();}}```五、实验结果1、运行`Main` 类后,输出结果如下:`Buddy the Labrador dog is eating greedily``Buddy is barking``Buddy is sleeping``Mimi is eating``Mimi the White cat is sleeping curled up``Mimi is meowing`2、可以看到,子类`Dog` 重写了父类`Animal` 的`eat()`方法,展示了狗特有的吃东西方式;子类`Cat` 重写了父类的`sleep()`方法,展示了猫特有的睡觉姿势。
java类的继承实验报告

java类的继承实验报告Java类的继承实验报告引言:在面向对象的编程语言中,继承是一种重要的概念。
Java作为一门面向对象的编程语言,也支持类的继承。
本篇实验报告将介绍Java类的继承的基本概念、语法以及实际应用。
一、继承的基本概念继承是指一个类可以派生出另一个类,被派生出的类称为子类,派生出子类的类称为父类。
子类可以继承父类的属性和方法,并且可以在此基础上进行扩展或修改。
继承的关系可以形成类的层次结构,使得代码的复用性和可维护性得到提高。
二、继承的语法在Java中,使用关键字"extends"来实现类的继承关系。
子类通过继承父类来获得父类的属性和方法。
语法格式如下:```javaclass 子类名 extends 父类名 {// 子类的成员变量和方法}```在子类中可以重写父类的方法,以实现自己的逻辑。
使用关键字"super"可以调用父类的构造方法和成员变量。
三、继承的实际应用1. 代码复用继承的一个主要优势是可以实现代码的复用。
子类可以继承父类的属性和方法,避免了重复编写相同的代码。
例如,假设有一个父类"Animal",子类"Dog"和"Cat"可以继承父类的一些通用属性和方法,如"eat()"和"sleep()"。
2. 多态性继承也为多态性的实现提供了基础。
多态性是指一个对象可以根据不同的类型表现出不同的行为。
通过继承,可以将不同的子类对象赋给父类引用,实现对不同子类对象的统一操作。
例如,有一个父类"Shape",子类"Circle"和"Rectangle"可以继承父类的方法"draw()",并在自己的类中实现具体的绘制逻辑。
通过将子类对象赋给父类引用,可以统一调用"draw()"方法,实现对不同形状的绘制。
java实验报告——继承与接口

南京理工大学泰州科技学院实验报告书课程名称:《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.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。
多态的基础是继承(包括了接口的实现)和方法的覆盖。
什么是多态多态对应的英文单词是polymorphism,百度翻译给出的翻译是:n.多型现象,多态性; 多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。
那是什么东西呢?在面向对象的编程语言里面(当然就包括Java了)就是某个方法或函数。
那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。
而方法的相同与否是由方法签名决定的。
所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。
状态、形态、姿态指的就是行为特征。
多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。
所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。
而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。
所以,这两个类肯定是有某种联系的。
我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的?答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。
比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。
例子不是很恰当,但意思就是这么个意思。
所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。
java类的继承实验报告

java类的继承实验报告Java类的继承实验报告引言:在面向对象的编程语言中,继承是一种重要的概念。
Java作为一种面向对象的编程语言,也提供了类的继承机制。
本实验旨在通过编写Java程序,深入理解和掌握Java类的继承。
实验目的:1. 理解继承的概念和原理;2. 掌握Java中类的继承的语法和用法;3. 实践继承的实际应用。
实验过程:1. 创建父类和子类在实验中,我们首先创建一个父类和一个子类。
父类可以是一个基本的类,子类则继承了父类的属性和方法。
这样,子类就可以在不改变父类的基础上,扩展自己的功能。
2. 继承的语法和用法Java中,使用关键字"extends"来实现类的继承。
子类通过继承父类,可以获得父类的属性和方法,并且可以在子类中添加新的属性和方法。
在实验中,我们可以通过创建子类对象,并调用继承自父类的方法来验证继承的正确性。
3. 方法的重写在继承中,子类可以重写父类的方法。
这样,当子类调用该方法时,实际上执行的是子类重写后的方法。
通过方法的重写,我们可以实现多态性的效果。
4. 实际应用在实验中,我们可以选择一个具体的应用场景,例如动物类的继承。
我们可以创建一个父类Animal,包含基本的属性和方法,然后创建子类Dog和Cat,分别继承Animal类,并添加自己的特有属性和方法。
通过这个实例,我们可以更好地理解继承的实际应用。
实验结果:通过实验,我们成功地创建了父类和子类,并验证了继承的正确性。
我们还成功地重写了父类的方法,实现了多态性的效果。
最后,我们还通过实际应用的例子,更好地理解了继承的实际应用。
实验总结:通过本次实验,我们深入理解和掌握了Java类的继承。
继承是面向对象编程中的重要概念,通过继承,我们可以实现代码的重用和扩展。
在实际应用中,继承也可以帮助我们更好地组织代码,提高代码的可读性和可维护性。
然而,继承也有一些限制和注意事项。
首先,Java中只支持单继承,即一个子类只能继承一个父类。
java 继承与接口 实验三

信息与计算科学专业实验报告public class Example3.1{public static void main(String args[]){ChinaPeople chinaPeople=new ChinaPeople();AmericanPeople americanPeople=new AmericanPeople(); BeijingPeople beijingPeople=new BeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera() ;beijingPeople.chinaGongfu();}}实验结果:Company company=new Company(employee);System.out.println("公司年工资总额:"+company.salariesPay()); }}实验结果:(3)代码:interface ComputerWeight{public double computerWeight();}class Television implements ComputerWeight{public double computerWeight(){return 155;}}class Computer implements ComputerWeight{public double computerWeight(){return 105;}}class WashMachine implements ComputerWeightfor(int i=0;i<goodsOne.length;i++){if(i%3==0)goodsOne[i]=new Television();else if(i%3==1)goodsOne[i]=new Computer();else if(i%3==2)goodsOne[i]=new WashMachine();}for(int i=0;i<goodsTwo.length;i++){if(i%3==0)goodsTwo[i]=new Television();else if(i%3==1)goodsTwo[i]=new Computer();else if(i%3==2)goodsTwo[i]=new WashMachine();}Car bigcar=new Car(goodsOne);System.out.println("大货车装载的货物重量:"+bigcar.getTotalWeights()); Car smallcar=new Car(goodsTwo);System.out.println("小货车装载的货物重量:"+smallcar.getTotalWeights()); }}实验结果:。
实验三 继承和接口

实验三继承和接口1.写出实验具体内容5、6、7和8的代码。
5.定义三角形,继承于二维图形,实现父类的方法。
public class Triangle extends Plannar{double a,b,c;Triangle(){}Triangle(double x,double y,double z){a=x;b=y;c=z;}double getLong(){return a+b+c;}public double getArea(){double s=(a+b+c)/2;double area=Math.sqrt(s*(s-a)*(s-b)*(s-c));return area;}}6.定义圆柱体,继承于三维图形,实现父类的方法。
public class Cylinder extends ThreeDime{double high;double radius;Cylinder(double high,double radius){this.high=high;this.radius=radius;}double getVolume(){return Math.PI*radius*radius*high;}public double getArea(){double bottomArea=Math.PI*radius*radius;double sideArea=2*Math.PI*radius*high;return bottomArea+sideArea;}}7.定义直角三角形类,继承于三角形类,求其面积。
public class RightAngleTriangle extends Triangle{RightAngleTriangle(){}RightAngleTriangle(double x,double y,double z){a=x;b=y;c=z;}public double getArea(){return a*b/2;}}8.定义主类,利用接口回调方式调用直角三角形求面积的方法和求圆柱体的面积和体积的方法,并输出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学城市学院实验报告课程名称:面向对象程序设计实验项目名称:类继承与接口(三)学生姓名专业:学号:实验地点:实验日期:年月日【实验目的】1.巩固Java类继承的相关知识2.理解对象上转型技术的优点和用途。
3.掌握接口的特点4.接口与抽象类的异同之处【实验内容】一、类继承相关知识强化1. 执行以下程序,给出执行Bbb的结果,并说明指出类Bbb的this.i与super.i的含义(即它们都对应哪个变量)。
class Aaa{int i;Aaa(int a){ i = a;}}class Bbb extends Aaa{int j,k;Bbb(int i){super(i);j = this.i;k = super.i;}public static void main(String[] args){Bbb b = new Bbb(18);System.out.println(b.j +"\t" + b.k);}}执行Bbb的结果:this.i与super.i的含义(即它们都对应哪个类中定义的变量):都对应Aaa类中的变量。
2.接着上面例子,将类Bbb改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。
class Bbb extends Aaa{int i= -1,j= -1,k= -1; //比上面例子增加一个实例变量i;Bbb(int i){super(i);j = this.i; //本语句含义是:Bbb类中的变量i的值赋给jk = super.i; //本语句含义是:访问Aaa类中的变量i并将值赋给k}public static void main(String[] args){Bbb b = new Bbb(18);System.out.println(b.j +"\t" + b.k);}}执行Bbb的结果:-1 18这个例子与上面例子的区别:在Bbb类中也定义了变量i,将Bbb的直接超类Aaa中的变量i给覆盖掉了。
3.对以下程序,给出执行Bbb的结果,并分析Bbb中main方法中a.show(1), b.show(1),c.show(1)的结果。
class Aaa{void show(){System.out.println("Aaa中定义的show()");}void show(int i){System.out.println("Aaa中定义的show(int i)");}}class Bbb extends Aaa{void show(){System.out.println("Bbb中定义的show()");}Aaa a = new Aaa();Bbb b = new Bbb();Aaa c = new Bbb();a.show(1);b.show(1);c.show(1);}}执行Bbb的结果:上面a.show(1)执行了那个类中定义的方法: Aaa类上面b.show(1);执行了那个类中定义的方法: Aaa类上面c.show(1)执行了那个类中定义的方法: Aaa类分析:类Bbb中的方法覆盖的的是类Aaa中的void show()方法,并未覆盖void show(int i),而 a.show(1);b.show(1);c.show(1);都是执行了Aaa类中的void show(int i)方法。
a.show(1)是直接访问超类Aaa中的void show(int i)方法,b.show(1)是子类Bbb继承了类Aaa中的void show(int i)方法,从而执行,c.show(1)中c是上转型对象,子类对象的引用向上转型为超类类型,从而执行void show(int i)方法。
4. 对以下程序,给出执行Bbb的结果,并分析这个例子结果与前面第4个例子,你可以得出什么结论。
class Aaa{int i = 10;static void show(){System.out.println("Aaa中定义的show()");}}class Bbb extends Aaa{int i = 20;static void show(){System.out.println("Bbb中定义的show()");}Aaa a = new Aaa();Bbb b = new Bbb();Aaa c = new Bbb();a.show();b.show();c.show();((Bbb)c).show();System.out.println(c.i); //考虑此处System.out.println(((Bbb)c).i); //考虑此处}}执行Bbb的结果:((Bbb)c).show()执行结果: Bbb中定义的show()System.out.println(c.i)执行结果: 10System.out.println(((Bbb)c).i)执行结果: 20分析与结论:A aa c = new Bbb();中c为上转型对象,将子类对象的引用转为超类类型,c本是子类Bbb 的对象,但通过向上转型,c.i引用的是超类的变量,同时也可以通过(Bbb)c)的方式将c强制向下转型,则( (Bbb)c).i访问的是子类Bbb的成员变量。
二、程序分析思考以下是例5.22的部分关键代码,请分析思考以下问题:(1)Student类中设计抽象方法cost会带来什么好处?(2)Student类的compareCost方法可以用于比较哪些类型的对象?如果没有设计抽象方法cost,那么会发生什么问题?注意:分析重点是软件设计的通用性考虑。
abstract class Student {//定义学生对象的抽象超类private String name;public Student(String name){ = name; }public abstract double cost();//声明抽象方法,表示学习费用public double compareCost(Student otherStudent){//当前对象与参数对象的费用比较return this.cost() - otherStudent.cost(); //返回大于、等于、小于零的数字}public String getName(){return ; }public void setName(String name){ = name; }}class StudentCostTool{static double sumCost(Student[] students){//计算students所有学生的费用之和double sum = 0;for(int i=0;i<students.length;i++)sum = sum + students[i].cost();return sum;}static double averageCost(Student[] students){//计算students学生的平均费用return sumCost(students)/students.length;}static double maxCost(Student[] students){//计算students所有学生的费用最大值if(students.length == 1)return students[0].cost();int index = 0;for(int i=0;i<students.length;i++)if(students[index].compareCost(students[i]) < 0)index = i;return students[index].cost();}}(1)Student类中设计抽象方法cost会带来什么好处?答:由于不同的学生费用不同,无法做到学费的统一通用,因此设计抽象方法cost,那么就可以在不同学生类中调用抽象方法cost在其中用不同的代码返回相应学生的学费。
(2)Student类的compareCost方法可以用于比较哪些类型的对象?如果没有设计抽象方法cost,那么会发生什么问题?答:用于比较哪些类型的对象当前对象,上转型对象及其子类对象。
如果没有设计抽象方法cost,那么compareCost方法就只能在Student的子类中设计了,即每个子类都编写一个compareCost方法,这样做就会导致相同代码的多处重复。
三、接口与抽象类实验1. 编译下面的程序, 指出错误.interface A{ //语句1void show();void show(int i){System.out.println("A show()");}}(1) 是否出错? 出错原因?是,接口A中必须为抽象方法,不能定义非抽象方法,而上面的void show(int i)为非抽象方法,应该为“void show(int i);”,不能有实现代码。
(2) 如果将上面语句1的interface改为abstract class , 编译是否出错?(提示: 注意abstract修饰符)出错。
当interface改为abstract class时,说明A为抽象类,那么抽象类A中的抽象方法void show();应该在前面加上abstract修饰符。
(3)根据上面的(1)和(2), 可以看出接口与抽象类的什么区别?接口中只能声明抽象方法,而抽象类中既能声明抽象方法,又能声明非抽象方法,但是抽象类中的抽象方法前面必须加上abstract修饰符,而接口则不需要,因为它被默认为抽象方法。
2. 编译下面的程序, 指出错误.interface IA{void show();void show(int i);}class A implements IA{ //语句1public void show(int i){ //语句2System.out.println("A show()");}}(1) 上面的程序编译是否出错? 出错原因?是,A是接口IA的实现类,它继承了接口IA的所有成员,但类A中只实现了接口IA中的无参抽象方法show,但还有一个有参的抽象方法show没有实现,所以必须将类A声明为抽象类,即在class A前面加上修饰符abstract。
(2) 如果将语句1中的class 改为abstract class, 编译是否出错? 为何?不出错。
A是接口IA的实现类,它继承了接口IA的所有成员,但类A中只实现了接口IA 中的无参抽象方法show,但还有一个有参的抽象方法show没有实现,所以必须将类A声明为抽象类,即在class A前面加上修饰符abstract。