




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上机实验三:面向对象程序设计(继承、封装、多态)类是面向对象程序设计的基础,是Java的核心和本质所在,在 Java中,所有的语言元素都封装在类中。编写java程序的过程就是从现实世界中抽象出java可实现的类,并用合适的语句定义它们的过程,本节将学习类的应用,以及如何创建类的实例,通过类的继承更有 效的组织程序结构,明确类之间的关系。掌握本节所讲的内容后,读者就可以使用面向对象技术编写java程序了。接口是特殊的抽象类, 只包含常量和方法的定义,而没有方法的实现,也就是说接口是方法定义和常量值的集合。包是Java语言中有效管理类的一个机制。 通过关键字package声明包语句,package
2、语句 作为Java源文件的第一条语句,指明该源文件定义的类所在的包。使用 import语句可以引 入包中的类。一、实验目的1)掌握类的定义和使用2)掌握对象的声明和使用3)了解构造函数的概念和使用4)掌握类的继承关系和派生方法5)掌握多态的概念与使用6)掌握接口的定义和使用7) 掌握Java中包的应用二、实验内容1)类的声明2)定义类成员变量以及成员方法3)实例化类、创建类对象以及类方法的调用4) 类的继承5) 通过实例理解接口的定义6) 通过实例熟悉接口的应用7) 正确应用Java中包和import语句三、实验步骤8) 类和类的实例化一个类的实现包括两部分:类声明和类体。(1)、类声明pub
3、licabstractfinal class className extends superclassNameimplements interfaceNameList期中修饰符publicabstractfinal说明类的属性className为类名superclassName为父类的名字interfaceNameList为类实现的接口列表(2)、类体 类体定义如下class className public|protected|privatestaticfinaltransientvolatileType variableName; 成员变量public|protected|privates
4、taticfinalabstractnativesynchronizedreturnType methondName ( paramList ) throws exceptionList statements成员方法(3)、成员变量成员变量的声明方式如下public|protected|private static final transient volatileType variableName;成员变量其中:public|protected|private 一 可见性static 一 静态变量(类变量),相当于实例变量final 一 常量transient 一 暂时性变量,用于对象存档vo
5、latile 一变量,用于共发线程的共享(4)、成员方法public|protected|private static final abstract native synchronized returnType methondName ( paramList ) throws exceptionList/ 方法体的声明 statements 方法体其中:public|protected|private 一可见性static 一静态方法,也叫类方法,可以通过类名直接调用final一方法不能被重写abstract 一抽象方法,没有方法体(体现多态时常用)native 一集成其他语言的代码synch
6、ronized 一控制多个并发线程的访问例子3-1请根据注释填写语句,并上机调试成功根据注释添加语句,并调试和修改程序,使其能够执行。class Retangle public Retangle(double l, double w) length = l; width = w;public double calcPerimeter() / 返回周长 L1public double calcArea() 返回面积 C2public void Show() /显示矩形的长和宽 L3 protected double length;protected double width;class Squa
7、re extends Retangle public Square(double side) /调用父类的构造方法 L4public double calcPerimeter() return width * 4;public void Show() System.out.println("边长为"+ width +"的正方形");public class Testpublic static void main(String args儿Square sq1=new Square(2.0);sq1.Show();System.out.println(&qu
8、ot;正方形的边长为"+sq1.calcPerimeter(); 填写外class(1) return (width+length)*2;(2) return width*length;System.-out-;p-in-lengith=-+49ng-h=-H'+-widl-lh="+widi-h 语句是(4)super(side,side);publicRetangle( double l,double w)length=l;width = w;publicdouble calcPerimeter()/返回周长return(width+ length )*2;pu
9、blicdouble calcArea()/返回面积return width* length ;publicvoid Show()/显示矩形的长和宽System.out .print("length="+ length +"n"protecteddoublelength ;protecteddoublewidth ;+"width="+ width );class Squareextends Retangle publicSquare(double side)/调用父类的构造方法 super (side,side); publicdo
10、ublecalcPerimeter() return width * 4; publicSystem.void Show() out .println("边长为"+ width + "的正方形");Retangle public class Testpublic static void main(String args儿Square sq1= new Square(2.0);sq1.Show();System. out .println("正方形的周长为"+sq1.calcPerimeter(); 2) 类的继承继承是面向对象程序设计
11、的方法中的一种重要手段,通过继承可以更有效的组织程序 的结构,明确类之间的关系。 继承通过extends关键字来实现,子类继承父类的属性和行为, 同时可以修改父类的属性和行为,并添加新的属性和行为。Java不支持多重继承。创建子类的格式如下class SubClass extends SuperClass 其中SubClass一子类的名称 extends一继承的关键字 SuperClass父类的名字例子3-2请分析程序,填写语句的功能注释,并上机调试成功。下面这个例子通过点、圆的层次结构,介绍类的继承。import java.text.DecimalFormat;import javax.sw
12、ing.JOptionPane;class Pointprotected int x,y ;public Point()setPoint(0,0);public Point(int a,int b) setPoint(a,b);public void setPoint(int a,int b) U调用格式化数字输出/ joptionpane让您轻松弹出一个标准的对话框父类点的的定义/定义点的坐标/确定构造函数构造函数重载带参数的构造函数/Lx=a;y=b;public int getX() return x;/获彳导 X 的坐标public int getY() return y;/ 获彳导
13、Y 的坐标public String toString()return ""+x+","+"y"+""/*子类圆的定义*/class Circle extends Point 圆类继承父类点类protected double radius,定义圆的半径public Circle() setRadius(0);/定义子类的构造函数,隐含调用了父类的构造函数public Circle(double r,int a,int b)super(a,b);/22)setRadius(r); public void setRad
14、ius(double r) radius = (r>=0.0?r:0.0); /33) public double getRadius() / 获得圆半径return radius; public double area(儿/ G4Jreturn Math.PI*radius*radius; public String toString()/圆的半径。以及圆心坐标转换成字符串输出 return "Center="+""+x+","+y+""+"Radius="+radius; public
15、 class InheritanceTestpublic static void main(String args口儿Point pointRef,p;声明两点对象Circle circleRef,c; 声明两圆对象String output;/定义一个字符串变量p=new Point(30,50);/ 给点对象赋值 c=new Circle (2.7,120,89);/ 给圆对象赋值把点对象和圆对象转换成字符串后给字符串output赋值output="Pointp:"+p.toString()+"nCirclec:"+c.toString();poin
16、tRef=c;output=output+"nnCircle c(via poineRef):"+pointRef.toString();circleRef=(Circle)pointRef; _output=output+"nnCircle c(via poineRef):"+circleRef.toString();DecimalFormat precision2=new DecimalFormat("0.00");output+= "nAreaofc(via circleRef):"+precision2.f
17、ormat(circleRef.area();将圆定义成点对象输出if( p instanceof Circle )/(5)circleRef=(Circle) p;output+="nn cast successful"else output+="nn p dose not refer to a Circle"利用对话框输出相关信息JOptionPane.showMessageDialog(null,output,"InheritanceTset",JOptionPane.INFORMATION_MESSAGE);退出System.
18、exit(0);语句的功能注释:(1) 方法成员,设置变量 x、y(2) 调用父类的构造函数(3) 设置半径(4) 求取面积2. 接口的定义与应用接口声明的形式如下所示:interface 接 口名字/常量定义和方法定义接口使用的关键字是implements ,形式如下所示:class A implements Printable , Addable其中类A中使用接口 Printable 和Addable接口的特点:1 .类体中必须实现接口中定义的所有方法;2 .接口中的方法和常量必须是public的。3 .实现方法时,方法头必须一致(返回值类型,名字,参数) ;4 .父类被继承时,接口同时被
19、继承;5 .接口也可被继承,关键字为extends ;6 .接口一般表示功能,而类一般表示属性。例子3-3本实例实现了一个字符栈。程序思路是:首先定义一个字符栈的接口 CharStackInterface,定义了栈的空间容量,规定栈所包含的方法,然后定义栈类CharStack ,该类实现了字符栈的接口,最后编写测试类 StackDemo进行测试。请根据编程思路实现字符栈的接口 CharStackInterface ,并调试程序正确运行,写出程序执行结果。interface CharStackinterface需要实现的字符栈接口class CharStack implements CharSt
20、ackinterfacechar data口;int top;CharStack()data=new char maxsize;public void initStack() top=-1;public boolean push(char x)if(!full() data+top=x; return true ;else return false;public char pop()if(!empty() top-; return datatop+1;elsereturn '0'public boolean empty() return top=-1;public boolea
21、n full() return top= maxsize-1; public class StcckDemo public static void main(String args口) CharStack s=new CharStack(); s.initStack();s.push('A');s.push('B');System.out.println(s.pop();System.out.println(s.pop();字符栈的接口 CharStackInterface程序的执行结果:四、上机实践1.编写程序:在圆类的基础上派生出了圆锥类,按照注释填空,并调
22、试执行成功,写出程序的执行结果。class Circle double r ;Circle( ) (1) 无参构造方法,默认半径为1.0Circle( double a) /有参构造方法L2 double Area( ) £3) 返回面积doubleGirth( ) 返回周长class Cone extends Circledouble h;Cone() super ();h=1.0;Cone(double rr,double hh)(5)/为半径和高赋值double V() 返回圆锥的体积public class ConeTestpublic static void main(St
23、ring args口) Cone c1=new Cone();System.out .println(c1.V();Cone c2=new Cone(1.0,3.0);System.out .println(c2.V();按照注释的填空:(1)r=1.0(2) this.a=a;(3)returnArea(4)returnGirth(5)rr=r;hh=h;(6)return V程序的执行结果:c1.兀/3c2.兀2.下面程序实现了抽象类的继承和接口的实现,同时还体现了接口的回调和向上转型, 请调试该程序,根据注释填空,并写出程序执行结果。abstract class Person publi
24、c abstractvoid Eat();public abstractvoid Sleep(); interface Father public void Smoking(); public void GoFishing(); interface Mon public void WatchTV(); public void Cook();class Me /(1) 承 Person 类,实现 Father 和 MonH 口public void Eat() System. out .println("我喜欢吃鱼香茄子");public void Sleep() Syste
25、m. out .println("我喜欢睡觉时做梦"); public void Smoking() System. out .println("我不喜欢抽烟"); public void GoFishing() System. out .println("我喜欢钓鱼"); public void WatchTV() System. out .println("我喜欢看电视"); public void Cook() System. out .println(" 我不太会做菜");public
26、class Test3 public static void main(String args) Person pl = new Me();p1.Eat();/(2)调用 pl 的 Sleep()方法Mon ml = (Mon)p1;/(3)调用 ml白WatchTV()方法m1.Cook();根据注释填空:(1) extends Person implements Father,Mon(2) p1.Sleep(3) m1.Cook程序执行结果:我喜欢吃鱼香茄子我喜欢睡觉时做梦妈妈喜欢看电视妈妈不太会做菜3.将程序上机调试成功,并写出程序执行结果。import java.util.*;inte
27、rface Instruments int i = 5;void play();String what();void adjust();class Wind5 implements Instruments public void play() System.out.println("Wind5.play()");public String what() return "Wind5" public void adjust。class Percussion5 implements Instruments public void play() System.out.println("Percussion5.play()");public String what() return "Percussion5&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 63522-37:2025 EN-FR Electrical relays - Tests and measurements - Part 37: Terminal temperature rise at rated load
- 幼儿中班《面包汽车》主题课件
- 2024年基础医学试题库(附答案解析)
- 《创业心得交流张华》课件
- 社会工作在孤残儿童收养中的作用考核试卷
- 《神奇的视觉图形之旅》课件
- 海洋旅游发展趋势考核试卷
- 船舶拆除项目环境保护措施与实施考核试卷
- 消费机器人市场竞争策略研究考核试卷
- 证券市场跨境监管合作与协调考核试卷
- 公路建设项目变更程序及管理办法
- 青岛版小学科学实验目录
- MySQL数据库PPT完整全套教学课件
- 承包商资格预审表
- 造口术前定位
- C语言实现FFT(快速傅里叶变换)
- 玻璃钢管道施工方案
- 锥坡工程量计算(支持斜交、溜坡计算)
- 康复医学-康复治疗技术
- 企业清产核资工作底稿
- 细胞膜-系统的边界【公开课教学PPT课件 高中生物】
评论
0/150
提交评论