实验6 继承与接口
- 格式:doc
- 大小:330.50 KB
- 文档页数:16
**大学**学院Java语言程序设计实验报告System.out.println("sum="+m1.num1+"+"+m1.num2+"+"+m1.num3+"="+m1.sum);}}问题:a、子类的sum,num1,num2分别是多少,父类的sum,num1,num2 分别是多少,如何在main中输出父类的sum,num1,num2子类:sum=600,num1=100,num2=200父类:sum=0,num1=0,num2=0;b、就这个例子,谈谈你对覆盖的理解?当子类的变量与父类的变量相同时,父类的变量被隐藏,main函数自动调用子类的变量2.运行下面的程序,理解方法的继承。
class Sort3{double max1,max2,max3;Sort3(){max1=-1;max2=-1;max3=-1;}double s;if (max1<max2){ s=max1;max1=max2;max2=s; }if (max1<max3){ s=max1;max1=max3;max3=s; }if (max2<max3){ s=max2;max2=max3;max3=s; }}}class sub_Sort3 extends Sort3{void subsort(double i,double j,double k){max1=i;max2=j;max3=k;sort(); //调用父类中的方法sort() …….① } }public class Class1{public static void main (String args[]){sub_Sort3 m1 = new sub_Sort3();m1.subsort(100,200,300);System.out.println("三个数从大到小为:"+m1.max1+","+m1.max2+","+m1.max3);}}问题:a、为什么标有.①处可以直接使用,而不需要生成Sort3的对象,然后使用该对象. sort()调用因为sub_sort3继承了sort,所以sort的方法就像是在子类中直接定义一样,可以被子类直接调用 B、程序实现什么功能?三个数之间互相比较大小3.运行下面的程序,理解方法的重载。
南京理工大学泰州科技学院实验报告书课程名称:《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。
继承与接口实验实验1class People{protected double weight,height;public void speakHello(){System.out.println("yayawawa");}public void averageHeight(){height=173;System.out.println("average height:"+height);}public void averageWeight(){weight=70;System.out.println("average weight:"+weight);}}class ChinaPeople extends People{【代码1】 //重写public void speakHello()方法,要求输出类似“你好,吃了吗”这样的 //汉语信息【代码2】 //重写public void averageHeight()方法,要求输出类似//“中国人的平均身高:168.78厘米”这样的汉语信息【代码3】 //重写public void averageWeight()方法,//要求输出类似“中国人的平均体重:65公斤”这样的汉语信息public void chinaGongfu(){【代码4】//输出中国武术的信息,例如:"坐如钟,站如松,睡如弓"等}}class AmericanPeople extends People{【代码5】 //重写public void speakHello()方法,要求输出类似//“How do you do”这样的英语信息。
【代码6】 //重写public void averageHeight()方法【代码7】 //重写public void averageWeight()方法public void americanBoxing(){【代码8】//输出拳击的信息,例如,“直拳”、“钩拳”等}}class BeijingPeople extends ChinaPeople{【代码9】 //重写public void speakHello()方法,要求输出类似“您好”这样的汉语信息【代码10】 //重写public void averageHeight()方法【代码11】 //重写public void averageWeight()方法public void beijingOpera(){【代码12】//输出京剧的信息}}public class Example{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();}}实验2abstract class Employee{public abstract double earnings();}class YearWorker extends Employee{【代码1】//重写earnings()方法}class MonthWorker extends Employee{【代码2】//重写earnings()方法。
应用数学学院专业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实现部分多继承功能的体现。
**大学**学院Java语言程序设计实验报告7.体会教材的面向接口编程四、实验步骤:1.a.子类:sum=600,num1=100,num2=200父类:sum=0,num1=0,num2=0b.覆盖是指子类在继承父类之后,给变量名相同的参数一个新的值并在类中使用,覆盖了父类中继承下来的值。
子类重写父类的方法,要想在子类中调用超类中被覆盖掉的方法就需要用super关键字2.a.因为子类sub_Sort3继承了父类Sort3,可以直接使用父类的方法b.实现从大到小排序3.4.重载:重载指一个类里可以有多个方法具有相同的名字,但这些方法的参数必须不同。
重写:子类的方法的名字、参数个数、参数的类型和父类的方法完全相同。
子类通过方法的重写可以隐藏继承的方法。
例如class A{float a(int a,int b){return a+b;}float a(int a,int b,int c){return a+b+c;}}是重载class B{float b(int a,int b){return a+b;}}class B extends A{float b(int a,int b){return a-b;}}是重写5.class A{int x=8;void myPrint() {//父类System.out.println(x);}}class B extends A {int y=16;String s="java program!";void myPrint() {//子类System.out.println(y+" "+s);}void printAll() {myPrint();super.myPrint();}}public class Application {public static void main(String args[]) {B b=new B();b.printAll();}}6.class A{int i;float x;A(int i,float x) {this.i=i;this.x=x;}}public class test {public static A b(A a) {a.i=a.i+1;a.x=a.x+2;return a;}public static void main(String args[]) {A a=new A(2,8.0f);System.out.println("i="+a.i+" x="+a.x);a=b(a);System.out.println("i="+a.i+" x="+a.x);}}五、实验结果与分析(含程序、数据记录及分析和实验总结等):六:思考题:实验成绩:。
一、引言在面向对象的编程语言中,继承和接口是两个重要的概念。
在Java中,继承和接口的关系是非常紧密的,它们对于构建灵活而强大的代码结构至关重要。
本文将对Java中继承与接口的关系进行梳理,并通过实际的例子来说明它们的用途。
二、继承与接口的概念1. 继承的概念继承是面向对象编程中的重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。
子类可以继承父类的属性和方法,也可以重写父类的方法,从而实现代码的复用和扩展。
2. 接口的概念接口是一种抽象的数据类型,它定义了一个类所具有的方法,但不包括方法的具体实现。
类可以实现一个或多个接口,从而拥有接口中定义的方法。
接口可以帮助我们实现多重继承,提高代码的灵活性。
三、继承与接口的关系1. 继承与接口的相似之处继承和接口都可以实现代码的复用和扩展,它们都允许子类或实现类使用父类或接口的属性和方法。
2. 继承与接口的区别(1)继承是一种类与类之间的关系,它可以帮助我们构建类的层次结构,从而实现代码的复用。
而接口是一种约定,它定义了一组方法的规范,所有实现了该接口的类都必须实现这些方法。
(2)一个类只能继承一个父类,但是可以实现多个接口。
3. 继承与接口的关系在Java中,一个类既可以继承一个父类,又可以实现多个接口。
这种灵活的设计可以帮助我们构建更加强大和灵活的代码结构。
四、继承与接口的实际用途1. 继承的用途(1)代码复用:通过继承,子类可以直接使用父类的属性和方法,从而减少代码的重复编写。
(2)代码扩展:通过继承,子类可以重写父类的方法,从而实现对方法的灵活扩展。
例子:```class Animal {void sound(){System.out.println("动物发出叫声");}}class Dog extends Animal {void sound(){System.out.println("狗汪汪叫");}}```2. 接口的用途(1)实现多重继承:通过实现多个接口,一个类可以拥有多个接口中定义的方法。
深圳大学实验报告课程名称:JA V A程序设计实验项目名称:继承和接口学院:计算机与软件学院专业:指导教师:**报告人:侯锦辉学号:********** 班级:01 实验时间:2016-10-11实验报告提交时间:2016.10.22教务处制一、实验目的(1)理解继承的概念,掌握继承的语法;(2)学习定义和使用子类;(3)学习定义和使用抽象类;(4)学习定义和使用接口;(5)学习实现接口;(6)掌握继承过程中的方法覆盖,区分它与方法重载的不同;(7)掌握如何利用接口间接实现多重继承;(8)掌握对象类型之间的转换规则;(9)掌握多态与动态绑定。
二、实验内容本次实验内容有两题:第一题:(1)编写图形接口Shape,该接口包含一个常量pi(pi=3.14)和三个抽象方法:一个是getCircumference(),功能为求图形的周长;一个是getArea(),功能为求图形的面积;一个是getShapeName(),功能为返回图形的名称。
(2)编写类Show,该类有一个方法:printShape(Shape sh),功能为输出图形参数sh的名称、周长和面积。
(3)编写Show的两个子类,一个是圆形类Circle,另一个是矩形类Rectangle,要求这两个类都要实现图形接口Shape。
Circle类有一个成员变量:radius(圆的半径);Rectangle类有两个成员变量:height(长方形的高)和width(长方形的宽)。
并且,Rectangle类包含一个内部类JudgeSquare,它有一个方法judge(),判断这个长方形是否为一个正方形,并输出判断结果。
(4)编写测试类Test,生成一个Circle对象和两个Rectangle对象(一个为长方形,一个为正方形),三个对象分别调用父类的printShape方法,输出各自的周长和面积;其中Rectangle 对象还要调用内部类JudgeSquare的方法judge来判断自己是否为正方形;输出结果类似如下所示:(提示:实现一个接口的类的对象,可利用接口回调直接赋值给接口,和上转型类似(子类对象可直接赋值给父类对象))第二题:请设计3个类,分别是学生类Student,本科生类Undergraduate,研究生类Postgraduate,其中Student类是一个抽象类,它包含一些基本的学生信息,如姓名、类别(本科生还是研究生)、所学课程(这里假定为3门课,用一维数组表示)成绩和成绩等级等,而Undergraduate 类和Postgraduate都是Student类的子类,它们之间的主要差别是计算3门课程平均成绩等级的方法有所不同,研究生的标准要比本科生的标准高一些,如下表所示:80~100 优秀90~100 优秀70~80 良好80~90 良好60~70 一般70~80 一般50~60 及格60~70 及格50以下不及格60以下不及格假设某班级里既有本科生(3个)也有研究生(2个),请编写程序统计全班学生的成绩等级并显示出来。
**大学Java语言程序设计实验报告m1.sum(100,200,300);System.out.println("sum="+m1.num1+"+"+m1.num2+"+"+m1.num3+"="+m1.sum);}}问题:a、子类的sum,num1,num2分别是多少,父类的sum,num1,num2 分别是多少,如何在main中输出父类的sum,num1,num2。
子类的sum,num1,num2分别是100,200,300父类的sum,num1,num2 分别是多少0,0,0使用super调用父类的构造方法,super(sum,num1,num2)b、就这个例子,谈谈你对覆盖的理解?2.运行下面的程序,理解方法的继承。
问题:a、为什么标有.①处可以直接使用,而不需要生成Sort3的对象,然后使用该对象. sort()调用sub_sort3是sort3的子类,继承了父类的方法B、程序实现什么功能?实现对三个数从大到小排序3.运行下面的程序,理解方法的重载。
class Sort2or3{double max1,max2,max3;Sort2or3(){max1=-1;max2=-1;4.运行下面的程序,理解方法的覆盖。
class sort_Demo{int i,j,k,swap;sort_Demo(){i=j=k=swap=0;}void sort(int t1,int t2[]){ //父类中的方法用来实现升序//用选择法按升序排列for(i=0;i<t1-1;i++){k=i;for(j=i+1;j<t1;j++)if(t2[j]<t2[k]) k=j;if (k!=i){swap=t2[i];t2[i]=t2[k];t2[k]=swap;}}}} }问题:比较3和4,谈谈你对重载和重写的认识,最好可以自己举例说明子类重写方法覆盖了父类的方法,那么子类对象调用发放一定调用的是重写方法,重写方法(覆盖方法)既可以操作继承的成员变量、调用继承的方法也可以操作子类新声明的成员变量、调用新定义的其他方法,但无法操作被子类隐藏的成员变量和方法。
继承与接口实验报告实验名称:继承与接口实验实验目的:通过编写一个Java程序,探究继承与接口的相关概念、特点和应用。
实验过程:在实验过程中,我们创建了一个Java程序,包含了多个类和接口,用于说明继承和接口的相关概念和应用。
其中,类之间的继承关系如下所示:``` Animal ├── Mammal │ ├── Cat │ └── Dog └── Reptile └── Snake ```注:以上为继承关系图,箭头指向父类/超类。
在该程序中,所有的动物(Animal)都有以下属性:- 名称(name) - 年龄(age)除此之外,猫(Cat)、狗(Dog)和蛇(Snake)都有自己的属性和方法。
其中,猫和狗都是哺乳动物(Mammal),而蛇是爬行动物(Reptile)。
我们使用了两个接口,分别是:- 可以发声的(Soundable) - 可以移动的(Movable)这两个接口分别定义了两个方法:发声(makeSound)和移动(move)。
在这些类和接口的基础上,我们编写了一个测试类(TestAnimals),测试了每个类和接口的功能。
实验结果:- Animal类:Animal类是所有动物的“祖先”类,它包含了所有动物共有的属性。
- Mammal类:Mammal类是哺乳动物的基类,它包含了所有哺乳动物共有的属性和方法。
- Reptile类:Reptile类是爬行动物的基类,它包含了所有爬行动物共有的属性和方法。
- Cat类:Cat类继承了Mammal类,它包含了猫的属性和方法。
- Dog类:Dog类继承了Mammal类,它包含了狗的属性和方法。
- Snake类:Snake类继承了Reptile类,它包含了蛇的属性和方法。
- Soundable接口:Soundable接口定义了makeSound 方法,用于让实现了该接口的类发出声音。
- Movable接口:Movable接口定义了move方法,用于让实现了该接口的类移动。
继承与接口实验报告本次实验主要涉及到Java中的继承和接口的使用。
通过实验,我们可以更好地理解和掌握继承和接口的概念、特点和使用方法。
实验步骤:1. 创建一个父类Animal,其中包含成员变量name和age,以及方法eat()和sleep()。
2. 创建两个子类Cat和Dog,它们分别继承自Animal类,并分别实现自己的eat()和sleep()方法。
3. 创建一个接口Swim,其中包含一个swim()方法。
4. 在Dog类中实现Swim接口,并实现swim()方法。
5. 创建一个测试类Test,其中包含main()方法。
在main()方法中,创建一个Cat对象和一个Dog对象,并分别调用它们的eat()和sleep()方法。
6. 在main()方法中,创建一个Swim类型的变量s,将Dog对象赋值给它,并调用s的swim()方法。
实验结果:通过实验,我们成功地创建了Animal类和它的两个子类Cat和Dog,它们分别继承了Animal类的成员变量和方法,并实现了自己的eat()和sleep()方法。
同时,我们还创建了Swim接口,并在Dog类中实现了它。
在测试类Test中,我们成功地创建了Cat和Dog对象,并调用了它们的eat()和sleep()方法。
同时,我们还创建了一个Swim 类型的变量s,将Dog对象赋值给它,并调用了s的swim()方法。
实验结论:通过本次实验,我们深入理解了Java中的继承和接口的概念和使用方法。
其中,继承可以让子类继承父类的成员变量和方法,从而避免了重复编写代码的问题;而接口则可以让类实现共同的方法,提高代码的重用性和可维护性。
同时,我们还学会了如何在子类中实现接口,并在测试类中使用。
这些知识对于我们今后的Java程序开发将有很大的帮助。
java上机实践继承与接口继承与接口是Java语言中的两个重要概念,也是面向对象编程的核心特性之一。
在Java中,继承和接口的使用可以帮助我们实现代码的重用和扩展,提高程序的灵活性和可维护性。
本文将从继承和接口的概念入手,详细介绍它们的特点和使用方法。
一、继承继承是面向对象编程中的一种机制,通过继承,子类可以继承父类的属性和方法,并可以在此基础上进行扩展或修改。
在Java中,使用关键字extends来实现类的继承关系。
1. 单继承Java中,一个类只能继承自一个父类,这种继承方式称为单继承。
单继承可以使类的层次结构更加清晰,避免了多继承可能带来的复杂性和歧义性。
2. 继承的特点继承具有以下几个特点:(1)子类继承了父类的属性和方法,可以直接使用父类中的代码;(2)子类可以在继承的基础上添加新的属性和方法,实现代码的扩展;(3)子类可以重写父类的方法,实现对父类行为的修改;(4)子类可以通过super关键字调用父类的构造方法;(5)子类的对象可以赋值给父类的引用。
3. 继承的示例下面通过一个简单的示例来说明继承的使用。
假设有一个父类Animal,有一个子类Dog继承自Animal,代码如下:```javaclass Animal {protected String name;public Animal(String name) { = name;}public void eat() {System.out.println(name + " is eating");}}class Dog extends Animal {public Dog(String name) {super(name);}public void bark() {System.out.println(name + " is barking");}}public class Main {public static void main(String[] args) {Dog dog = new Dog("Tom");dog.eat();dog.bark();}}```在上述示例中,Animal是一个父类,Dog是它的子类。
继承与接⼝实验深圳⼤学实验报告课程名称:Java实验序号:实验2实验名称:继承与接⼝班级:计算机3 姓名:卢志敏同组⼈:实验⽇期:2008 年11 ⽉16 ⽇教师签字:⼀、实验⽬的1.继承●⼦类的继承性●⼦类对象的创建过程●成员变量的继承与隐藏●⽅法的继承与重写2.上转型对象掌握上转型对象的使⽤3.接⼝回调掌握接⼝回调技术⼆、实验环境JDK1.5 Winxp三、实验步骤与⽅法实验1编写⼀个Java应⽤程序,除了主类外,该程序中还有4个类:People、ChinaPeople、AmericanPeople类。
该程序具体要求如下:●People类有访问权限是protected的double型变量:height和weight,以及public voidspeakHello()、public void averageHeight() 和public void averageWeight()⽅法。
●ChinaPeople类是People的⼦类,新增了public void chinaGongfu()⽅法。
要求ChinaPeople重写⽗类的public void speakHello()、public void averageHeight()和public void averageWeight()⽅法。
●AmericanPeople类是People的⼦类,新增public void americanBoxing()⽅法。
要求AmericanPeople重写⽗类的public void speakHello()、public void averageHeight()和public void averageWeight()⽅法。
●BeijingPeople是ChinaPelple的⼦类,新增public void beijingOpera()⽅法。
要求ChinaPeople重写⽗类的public void speakHello()、public void averageHeight()和public void averageWeight()⽅法。
山西大学计算机与信息技术学院姓名学号专业班级课程名称 Java实验实验日期成绩指导教师批改日期实验名称实验 6 继承与接口[实验目的]1、掌握java 继承中父类及其子类的定义方法。
2、掌握子类重写父类同名方法的方法。
3、掌握接口的用法。
(1) 学习如何定义接口 ;(2) 掌握接口的实现方式 ;(3) 使用实现了接口的类 ;(4) 理解接口与抽象类的区别。
[实验要求]1、复习理论教学中所学的内容。
2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。
3、认真总结实验并书写实验报告。
[实验内容]1、类的继承性练习(1) 程序源代码如下。
public class Student{protected String xm; //姓名,具有保护修饰符的成员变量protected int xh;//学号void setdata(String xm,int xh) //设置数据的方法{this.xm=xm;this.xh=xh;}public void print() //输出数据的方法{System.out.println(xm+", "+xh);}}(2) 编译源并运行程序。
贴图如下(二)创建将被继承的类(1) 程序功能:通过Student类产生子类CollegeStudent,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、bj(bj)。
在程序中调用了父类的print 方法,同时可以看出子类也具有该方法。
程序代码:运行结果贴图:(三)了解成员方法的覆盖方式(1)编写覆盖了Object 类toString方法的一个类,并用System.out.println()输出该类的一个对象。
程序代码:运行结果贴图:(2)试着以Point类为例,尝试为Object类的clone()和equals()方法进行覆盖,Point类包含私有成员x,y,构造方法1(包含两个参数a,b),构造方法2(参数为Point p),clone方法,equals 方法,toString方法。
山西大学计算机与信息技术学院}(2) 编译源并运行程序。
贴图如下图一(二)创建将被继承的类(1) 程序功能:通过Student类产生子类CollegeStudent,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、bj(bj)。
在程序中调用了父类的print 方法,同时可以看出子类也具有该方法。
程序代码:public class CollegeStudent extends Student{protected String xy;protected int bj;void setdata(String xm,int xh,String xy,int bj){super.setdata(xm, xh);this.xy = xy;this.bj = bj;}public void print() {super.print();System.out.print("学院:"+xy+"班级:"+bj);}}class TestCollegeStudent{public static void main(String[] args) {CollegeStudent cs = new CollegeStudent();cs.setdata("小蓝", 2010242555, "计算机学院", 1);cs.print();}}运行结果贴图:图二(三)了解成员方法的覆盖方式(1)编写覆盖了Object 类toString方法的一个类,并用System.out.println()输出该类的一个对象。
程序代码:public class OverWriteToString {private String str;public OverWriteToString(){}public OverWriteToString(String str){this.str = str;}public String ToString(){return super.toString()+"\n"+str;}public static void main(String[] args) {OverWriteToString o = new OverWriteToString("This is a method "+"to overwrite ToString method!");System.out.println(o.ToString());}}运行结果贴图:图三(2)试着以Point类为例,尝试为Object类的clone()和equals()方法进行覆盖,Point类包含图四(四)this、super和super()的使用(1)程序功能:说明this、super 和super()的用法。
实验报告姓名学号专业班级课程名称 Java实验实验日期成绩指导教师批改日期实验名称实验 6 继承与接口[实验目的]1、掌握java 继承中父类及其子类的定义方法。
2、掌握子类重写父类同名方法的方法。
3、掌握接口的用法。
(1) 学习如何定义接口 ;(2) 掌握接口的实现方式 ;(3) 使用实现了接口的类 ;(4) 理解接口与抽象类的区别。
[实验要求]1、复习理论教学中所学的内容。
2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。
3、认真总结实验并书写实验报告。
[实验内容]1、类的继承性练习(1) 程序源代码如下。
public class Student{protected String xm; //姓名,具有保护修饰符的成员变量protected int xh;//学号void setdata(String xm,int xh) //设置数据的方法{this.xm=xm;this.xh=xh;}public void print() //输出数据的方法{System.out.println(xm+", "+xh);}}import java.util.*;public class Exe_1 extends Student{public Exe_1(){};public static void main(String[] args) {Scanner input=new Scanner(System.in);Exe_1 text=new Exe_1();System.out.println("请输入姓名和学号:");text.setdata(input.next(), input.nextInt());System.out.println("显示如下:");text.print();}}(2) 编译源并运行程序。
贴图如下(二)创建将被继承的类(1) 程序功能:通过Student类产生子类CollegeStudent,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、bj(bj)。
山西大学计算机与信息技术学院实验报告(2)编译源并运行程序。
贴图如下(三) 了解成员方法的覆盖方式⑴编写覆盖了 Object 类toString 方法的一个类,并用 System.out.println()输出该类的一个对象。
String ToString(){super .toString()+"\n"+str; }public static void main(String[] args) {OverWriteToStri ng o = new OverWriteToStri ng("This is a method "+"to overwrite ToStri ng method!");System. out .println(o.ToString()); } (2)试着以Point 类为例,尝试为Object 类的cione()和equals ()方法进行覆盖,Point类包含程序代码:public class OverWriteToString { private public } public thisString str; OverWriteToStri ng(){OverWriteToStri ng(Stri ng str){ .str = str;publicreturn 图二}运行结果贴图图三私有成员x,y,构造方法1 (包含两个参数a,b),构造方法2 (参数为Point p), clone方法,equals方法,toString方法。
用TestPoint类进行测试。
程序代码:public class Point {private int x; private int y; public Poin t(){ }public Point( int a, int b){x = a;y = b;}public Poi nt(Poi nt p){x = p.x;y = p.y;}//重写equals()方法public boolean equals(Object o){if (o instanceof Point){ retur n (x==((Poi nt)o).x && y==((Poi nt)o).y);}elsereturn false ;}//重写toString ()方法public Stri ng toStri ng(){return super .toString()+"\n 该点的坐标为("+x+","+y+")";}//重写cione()方法public Object cione() throws CioneNotSupportedException { return new Point( this );}}class TestPoint{public static void main(String[] args) throws CioneNotSupportedException { Poi nt p = new Poi nt(2,3);Point p1= new Poin t(p);Poi nt p2 = (Poi nt)p.clo ne();System. out .println("p 与pl 相等吗?"+p.equals(p1));System. out .println("p 与p2相等吗?"+p.equals(p2));System. out .println(p);System. out .println(p1);System. out .println(p2);}运行结果贴图}}public Stri ng toStri ng(){return super .toString()+"\n 该线起点为:("+p1.x+","+p1.y+")"+"终点为:("+p2.x+","+p2.y+")";}}class TestLine{public static void main(String[] args) {Point p1 = new Poi nt();Poi nt p2 = new Poi nt(3,4);Line l = n ewL in e(p1,p2);System. out.println(”线l 的长度为:"+l.legth());System. out .println(l);}}运行结果贴图:图五(五)接口的实现与运用实验任务:本实验的任务是设计和实现一个Soundable接口,该接口具有发声功能,同时还能够调节声音大小。
实验报告姓名学号专业班级课程名称 Java实验实验日期成绩指导教师批改日期实验名称实验 6 继承与接口[实验目的]1、掌握java 继承中父类及其子类的定义方法。
2、掌握子类重写父类同名方法的方法。
3、掌握接口的用法。
(1) 学习如何定义接口 ;(2) 掌握接口的实现方式 ;(3) 使用实现了接口的类 ;(4) 理解接口与抽象类的区别。
[实验要求]1、复习理论教学中所学的内容。
2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。
3、认真总结实验并书写实验报告。
[实验内容]1、类的继承性练习(1) 程序源代码如下。
public class Student{protected String xm; //姓名,具有保护修饰符的成员变量protected int xh;//学号void setdata(String xm,int xh) //设置数据的方法{this.xm=xm;this.xh=xh;}public void print() //输出数据的方法{System.out.println(xm+", "+xh);}}import java.util.*;public class Exe_1 extends Student{public Exe_1(){};public static void main(String[] args) {Scanner input=new Scanner(System.in);Exe_1 text=new Exe_1();System.out.println("请输入姓名和学号:");text.setdata(input.next(), input.nextInt());System.out.println("显示如下:");text.print();}}(2) 编译源并运行程序。
贴图如下(二)创建将被继承的类(1) 程序功能:通过Student类产生子类CollegeStudent,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、bj(bj)。
在程序中调用了父类的print 方法,同时可以看出子类也具有该方法。
程序代码:class CollegeStudent extends Student {protected String xy;protected String bj;//此处定义新的成员变量,均为protected类型public static void main(String args[]) {Student p1 = new Student();p1.setdata("李四", 12321);p1.print();CollegeStudent s1 = new CollegeStudent();s1.setdata("张三", 12345); // 调用父类的成员方法s1.xy = "山西大学计算机学院"; // 访问本类的成员变量s1.bj = "2011级计算机科学与技术"; // 访问本类的成员变量s1.print();System.out.print(s1.xm + ", " + s1.xy + ", " + s1.bj);}}运行结果贴图:(三)了解成员方法的覆盖方式(1)编写覆盖了Object 类toString方法的一个类,并用System.out.println()输出该类的一个对象。
程序代码:class Circle {private int radius;public Circle(int radius) {this.radius=radius;}// 定义一个参数的构造方法// 对于私有成员radius进行get和set(定义getRadius()和setRadius())// 定义求面积方法area()public void setRedious(int radius){this.radius=radius;}public int getRadius(){return radius;}public double getArea(int radius){double area;area=radius*radius*Math.PI;return area;}public String toString() {return"圆半径:" + getRadius() + " 圆面积:" + getArea(radius);}}public class GetArea {public static void main(String args[]) {Circle c = new Circle(10);System.out.println("\n" + c.toString());}}运行结果贴图:(2)试着以Point类为例,尝试为Object类的clone()和equals()方法进行覆盖,Point类包含私有成员x,y,构造方法1(包含两个参数a,b),构造方法2(参数为Point p),clone方法,equals 方法,toString方法。
用TestPoint类进行测试。
程序代码:public class Point {private double x;private double y;public Point(double x, double y) {this.x= x;this.y= y;}public Point(Point p) {this.x= p.x;this.y= p.y;}protected Object clone() {Object a = new Point(x, y);return a;}public boolean equals(Object o) { // 一定是objectif (o instanceof Point) {if (x == ((Point) o).x && y == ((Point) o).y) // 转换,且转换后的真题加括号return true;elsereturn false;} elsereturn false;}public String toString() {System.out.println(super.toString());return ("x=" + x + " y=" + y);}}public class TestPoint {public static void main(String[] args) {Point a = new Point(4, 5);Point d = new Point(3, 5);Point b = new Point(a);Object c = a.clone();System.out.println(a.equals(d));System.out.println(a.equals(c));System.out.println("a " + a);System.out.println("b " + b);System.out.println("c " + c);// 因为clone定义是new的为Point,所以为Point类}}运行结果贴图:(四)this、super和super()的使用(1)程序功能:程序功能:说明this、super 和super()的用法。
程序首先定义Point(点)类,然后创建点的子类Line(线)。
最后通过TestLine类输出线段的长度。
程序中通过super(a,b)调用父类Point 的构造方法为父类的x 和y 赋值。
在子类Line 的setLine方法中,因为参数名和成员变量名相同,为给成员变量赋值,使用this 引用,告诉编译器是为当前类的成员变量赋值。
在length 和toString 方法中使用父类成员变量时,使用super 引用,告诉编译器使用的是父类的成员变量。
程序代码:class Point {protected int x, y;Point(int a, int b) {setPoint(a, b);}public void setPoint(int a, int b) {x = a;y = b;}}class Line extends Point {protected int x, y;Line(int a, int b) {super(a, b);setLine(a, b);}public void setLine(int x, int y) {this.x = x + x;this.y = y + y;}public double length() {int x1 = super.x, y1 = super.y, x2 = this.x, y2 = this.y;return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));}public String toString() {return"直线端点:[" + super.x + "," + super.y + "] [" + x + "," + y + "] 直线长度:" + this.length();}}public class Super {public static void main(String args[]) {Line line = new Line(50, 50);System.out.println("\n" + line.toString());}}运行结果贴图:(五)接口的实现与运用实验任务 :本实验的任务是设计和实现一个 Soundable 接口 , 该接口具有发声功能 , 同时还能够调节声音大小。
Soundable 接口的这些功能将会由 3 种声音设备来具体实现 , 它们分别是收音机Radio 、随身昕 Walkman 和手机 Mobilephone 。
最后还要设计一个应用程序类来使用这些实现了Soundable 接口的声音设备类。
程序运行时 , 先询问用户想听哪种设备 , 然后程序就会按照该设备的工作方式来发出声音。