北京信息科技大学Java语言程序设计-抽象类和接口
- 格式:doc
- 大小:182.50 KB
- 文档页数:8
【实验名称】Java程序设计基础【实验目的】1、学习和掌握Java程序的基本结构。
2、学习和掌握Java程序的基本开发过程和方法。
3、学习和掌握程序设计的基本开发步骤。
4、学习和掌握Java程序的基本输入、输出方法。
5、学习和掌握Java程序设计的基本技术。
【实验日期和时间记录】实验预习时间:2014.4.12.8:30—10:30实验过程时间:2014.4.12 10:30—17:00及2014.4.26.8:30—12:00【实验内容】1、创建、编译和执行Welcome.java。
(参见教材1.7和1.8小节,P8-11)【实验预习】1.这道题需要解决的是输出“welcome to java”这个字符串。
2.解决方案:用system.out.println(“welcome to java”).方法输出。
没有输入与处理,直接输出。
3.学会输出字符串的方法。
【附:程序代码】public class Welcome{public static void main(String[]args){System.out.println("Welcome to java!");//输出并显示信息Welcome to java!}}【实验过程及结果记录】在实验过程中没有遇到问题,需要注意的是System.out.println();的第一个字母大写。
2、(财务应用程序:工资单)编写程序,读入工资基本信息并打印工资单。
编写两种版本的程序,依次使用控制台实现输入\输出和GUI 实现输入\输出。
运行效果可参见图1和图2。
说明:⑴题目来源,教材编程练习2.11(P51)。
⑵控制台输入输出,请参考教材2.3(P21)和1.8小节(P10)。
⑶GUI输入输出,请参考教材2.18(P44)和1.9(P12)小节。
图1 工资单(控制台输入、输出)1)从控制台输入【实验预习】1.该程序是用来打印工资单。
2.读入信息,将信息以按照一定格式输出。
java之接⼝与抽象类和具体类之间的区别与联系
OOP语⾔,为了增加ADT的复⽤性和可维护性,通常需要使⽤接⼝和抽象类。
下⾯我们介绍⼀下接⼝,抽象类,和具体类之间的区别和联系:
⾯向对象的编程,最主要的⼀个想法就是抽象。
⽽接⼝和抽象类就是为抽象⽽⽣的。
在接⼝中,没有具体的属性,只规定了相应的⽅法和对应的参数和返回值。
这是⼀种最⾼程度的抽象,需要找到要代表的这⼀类对象的所有的共性,判断能够满⾜其应⽤的所有操作。
然后在对接⼝的实现过程中,针对不同的对象实例,对于接⼝中的⽅法进⾏不同的实现。
⽽对于抽象类,是较接⼝低⼀层次的抽象,它找到⼀些对象之间的共性,然后在⾃⼰的内部实现⼀定的功能,同时还规定⼀些抽象⽅法,让继承它的具体类能够根据不同的特性对于抽象⽅法进⾏不同的抽象。
⽽具体类,就是我们在应⽤中实际要应⽤的类。
对于这些类,其内部不能存在抽象⽅法,所有的⽅法都应有具体的实现。
同时⼀个抽象类可以对多个接⼝进⾏实现,只需要override接⼝中的抽象⽅法即可。
⽽具体类只能继承⼀个抽象类,然后override抽象类中的抽象⽅法。
这是抽象类和具体类之间的⼀个区别。
同时,在接⼝中,没有属性,所有的⽅法都是抽象⽅法,⽽在抽象类中,可以有具体的属性,⼀部分⽅法可以是已经实现的,但是仍要求有⼀部分⽅法是抽象的,要不然不能叫做抽象类,这是抽象类和接⼝的另⼀个区别。
Java中抽象类和接口的区别与联系0 引言抽象类是我们在对某一问题领域进行设计和分析时所得出的抽象概念,是一系列本质上相同,而外在形象各异的具体概念的抽象反映。
在面向对象领域中,抽象类的主要作用就是进行类型隐藏,是实现向对象设计的核心原则OCP(Open-Closed Principle)的关键。
1 抽象类的有关概念1)抽象类不能创建对象。
2)抽象类可以调用静态方法,同时不能对非静态方法进行调用。
3)抽象类可以对一个引用进行声明。
4)一个抽象类可以被子类继承,继承它的子类也可以是抽象类。
5)抽象类与多态性是密不可分的。
6)如果一个类用到了抽象方法,那么这个类必须是抽象类。
但是一个抽象类中却不一定要有抽象方法。
抽象类是Java中最为常用的语法之一,在开发过程中,它的主要作用就是抽象出某些子类的共性,由于在抽象类中仅对方法的作用进行说明,因此在使用不同的子类时,实现的方法是不一样的,这就是方法实现的个性。
抽象类中不一定要有抽象方法,但是大多数抽象类都含有可以让子类集成的抽象方法,如果在继承过程中,子类没有将抽象类中全部的抽象方法重写,那么这个子类就会变为抽象类;如果子类完成了全部抽象方法的重写,那么就可以完成自身的实例化。
在日常生活中,事物的功能都是确定的,因此现实中的类大多属于抽象类,只不过它的实现是基本都是通过子类来完成。
因此,抽象类不能独立存在,但如果在创建子类时,先完成父类的构建也是可行的。
可以说,抽象类就是一个标准,其作用在于对某类事物的方法进行定义,使其可以被不同的子类继承和实现。
所以,对于调用者来说,只需要了解抽象类的方法定义就可以实现对不同子类的调用。
2 接口的有关概念接口(inter faces)指的是Java中的一系列方法的声明,它包含了方法的特征,但是不包括对这种方法的实现,其原因就在于这些方法可以在不同的地方由不同的类实现,从而具备不同的功能。
通过接口,我们可以实现多继承,但这也只是接口众多功能中的一个。
《Java语言程序设计》课程教学大纲课程思政内容1.培养学生民族认同感,树立远大职业理想。
梳理国产操作系统的发展历史与现状,包括华为、中兴等国产企业在全球市场的崛起,在操作系统领域的新架构,向学生展示中国的信息技术领域成就,增强使命感与荣誉感;通过华为孟晚舟事件、美国的芯片垄断—引出:民族认同感。
党的十八届五中全会通过的“十三五”规划《建议》,明确提出实施网络强国战略以及与之密切相关的“互联网+”行动计划。
国家正着力实现关键技术自主可控,为维护国家安全、网络安全提供技术保障。
中国信息化需求巨大,但在一些关键技术领域如操作系统、芯片技术、CPU 技术等方面,还难以做到自主可控,对国家安全造成威胁。
引导学生明确:建设网络强国,不仅仅是靠网络技术,还要有软件技术等其他各类技术的支撑。
引导学生作为软件技术专业的一员,应更加明晰专业人才的培养目标,更加明确专业领域内工作岗位和工作内容的社会价值,自觉树立远大职业理想,将职业生涯、职业发展脉络与国家发展的历史进程融合起来。
2.向学生介绍中国在人工智能领域的布局,重点分析当代人工智能下软件技术如何支撑中国制造的智能化发展;3.通过专业知识的学习,引导学生深刻理解与认识所学软件开发知识对于国家信息产业发展、智慧城市建设、大数据智能信息处理等各方面的重要意义,使学生在学习过程中逐渐树立专业荣誉感;4.培养学生精益求精、工匠精神。
告诉学生在学好软件技术之后,走上工作岗位会成为程序员、软件系统运维人员、软件测试员、售前售后服务人员等。
在这些职位岗位上,要发挥工匠精神,精益求精地将程序开发、系统运维、程序测试、需求分析及技术问题处理等工作内容完成好,保证软件系统运行时正确、稳定,保证客户的需求被精确采集和纳入软件开发计划,保证软件运行时遇到问题能被及时解决。
引导学生在学习时,将知识夯实、精技强能,方能在今后工作中本领过硬,不出纰漏,工作成果令用户满意。
引导学生认识到,作为职业人,其专注、敬业、责任担当对完成好本职工作,进而促进软件行业整体的高水平、优质化发展具有重要意义。
Java开发接口和抽象类的区别接口在JAVA语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,虽然编写接口的方式和类很相似。
类描述对象的属性和方法,而接口包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但可被实现。
一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。
在Java中接口类型也可以用来声明一个变量。
接口与类相似点:1.一个接口可以有多个方法。
2.接口文件保存在.java结尾的文件中,文件名使用接口名。
3.接口的字节码文件保存在.class结尾的文件中。
4.接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:1.接口不能用于实例化对象。
2.接口没有构造方法。
3.接口中所有的方法必须是抽象方法。
4.接口不能包含成员变量,除了static和final变量。
5.接口不是被类继承,而是要被类实现。
6.接口支持多重继承。
接口有什么特性?1.接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为public abstract。
2.接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量。
3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类与接口的区别?1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
3. 接口中不能含有静态代码块以及静态方法(用static修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
Java程序设计_北京林业大学中国大学mooc课后章节答案期末考试题库2023年1.FlowLayout类在()包中。
参考答案:java.awt2.基本数据类型int的封装类是()。
参考答案:Integer3.在Windows操作系统中,Java源程序编译生成的.class文件,在Linux操作系统中不能被正确运行。
()参考答案:错误4.以下关于构造方法的描述,正确的是()。
参考答案:构造方法名与类名相同5.异常类InputMismatchException的直接父类是()。
参考答案:RuntimeException6.下列选项正确的是()。
参考答案:一个接口可以继承多个接口7.以下选项中,错误的是()。
参考答案:静态方法可以访问实例变量8.以下选项中,正确的标识符为()。
参考答案:汽车9.byte a;int n=10;以下选项错误的是()。
参考答案:a=n;10.以下选项中,()是自动装箱。
参考答案:Integer a=6;11.String s1,s2,s3;s1="Hello!";s2="Hello!";s3=new String("Hello!");则s1==s2;和s1==s3;的值为()。
参考答案:true,false12.启动主线程时,()。
参考答案:不需要调用任何方法13.class A{ int m=1; int add() { return m+1; }}class B extendsA{double m=6.0;double decrease() { return m-1; }}A a=new B();则a.m的值为()。
参考答案:114.面向对象有三个特征,分别是封装、继承和()。
参考答案:多态15.窗体默认是可见的。
()参考答案:错误16.File类的对象不可以()。
参考答案:读写文件17.Thread类的join()方法()。
【实验名称】实验2 类和对象【实验目的】1、学习和掌握Java创建对象的方法。
2、学习和掌握通过创建对象、使用类的方法。
3、学习和掌握Java类定义的方法。
4、了解类设计的一般原则。
【实验内容】1、(Java API类的应用)使用java.util.Random类,创建种子是1000的Random对象,然后使用nextInt(100)方法显示0到100之间前50个随机整数。
说明:⑴题目来源编程练习8.4(P238)。
⑵请查阅JavaAPI文档,了解java.util.Random的功能和使用方法。
【实验预习】1、输出0-100之间的50个随机整数。
2、建立种子为1000的random对象,返回0-100之间的随机整数型值,再输出这些值。
3、技术支持:用了java.util.random类,及循环语句。
【附:程序代码】public class RandomProgram{public static void main(String[]args){//以1000构造random对象java.util.Random random=new java.util.Random(1000);//输出0-100内的50个随机整型值for(int i=0;i<50;i++)System.out.print(random.nextInt(100)+" ");}}【实验过程及结果记录】在实验中遇到的问题:忘记写特定种子,这样使用的就是当前时间作为种子构造random对象。
2、(使用StackOfIntegers类,显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子。
例如:如果整数为120,那么显示的最小因子为5、3、2、2、2。
使用StackOfIntegers类存储因子(如:2、2、2、3、5),获取之后按倒序显示这些因子。
说明:⑴题目来源编程练习10.5(P296)。
河南工业大学课程作业课程高级Java开发技术作业名称Java SE综合知识专业班级计科1505 院系信息科学与工程学院姓名李杰学号 201516010118 任课老师孙宜贵考核等级一.目的考核学生对课程相关核心知识的理解掌握情况和综合分析能力。
二.要求结合本课程及先修课程内容,针对下面题目给出自己的分析结论或解决方案,可以参考其它书籍和网络资源,但不得照抄,不得雷同,否则作废!三.题目问题一:请结合Java 8新特性说明接口和抽象类的异同点(400字以内)。
答案:相同点:1. 接口和抽象类都能定义方法和属性。
2.接口和抽象类都是看作是一种特殊的类。
大部分的时候,定义的方法要子类来实现3.抽象类和接口都不能创建对象。
4. 抽象类和接口都能利用多态性原理来使用抽象类引用指向子类对象。
不同点:1. 接口能够多实现,而抽象类只能单独被继承,其本质就是,一个类能继承多个接口,而只能继承一个抽象类。
2. 方法上,抽象类的方法可以用abstract 和public或者protect修饰。
而接口默认为public abttact 修饰。
3. 抽象类的方法可以有需要子类实现的抽象方法,也可以有具体的方法。
而接口在老版本的jdk中,只能有抽象方法,但是Java8版本的接口中,接口可以带有默认方法。
4. 属性上,抽象类可以用各种各样的修饰符修饰。
而接口的属性是默认的public static final5. 抽象类中可以含有静态代码块和静态方法,而接口不能含有静态方法和静态代码块。
6. 抽象类可以含有构造方法,接口不能含有构造方法。
问题二:在Swing窗体应用程序中,事件处理代码有哪几种书写方式?请以一个JButton 按钮单击事件处理代码举例简要说明(结合Java 8新特性)。
答案:事件处理代码有4种1.实现一个ActionListener子类,再把按钮的事件响应委托给这个子类的实例处理。
JButton btnNewButton = new JButton("关闭");//关闭按钮btnNewButton.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {dispose();}});btnNewButton.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {}});让界面类实现ActionListener接口,再把事件响应委托给界面类.public class MyFrame extends JFrame implements ActionListener{public MyFrame() {....button2.addActionListener(this);}//按钮二的事件响应public void actionPerformed(ActionEvent e) {if(e.getSource()==button2){showMsg("按下" + button2.getText());}}}用匿名类实现ActionListener接口,再把事件委托给这个匿名类的实例.button1 = new JButton("按钮三");button1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {showMsg("按下" + button1.getText());}});4. Lambda表达式来实现监听:Button button = (Button) findViewById(R.id.button1);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(MainActivity.this, "按钮按下", Toast.LENGTH_SHORT).show(); }});} });。
抽象类什么是抽象类?JAVA允许在类中只声明方法而不提供方法的实现。
这种只有声明而没有方法体的方法称为抽象方法,而包含一个或多个抽象方法的类称为抽象类。
抽象(abstract)类:抽象类是以abstract关键字为开头的类。
抽象方法在声明中也要加上abstract 。
abstractclass Employee{ //抽象类:以abstract关键字为开头的类abstractvoid raiseSalary(); //抽象方法:只有声明而没有方法体的方法}注意:1.抽象类在使用上有特殊的限制,即不能创建抽象类实例。
2.如果抽象类的子类实现了抽象方法,即可以创建该子类的实例对象,否则该子类也是抽象类(对,没有看错),也不能创建实例。
3.So,一般将抽象类构造方法的访问权限声明为protected而不是public,从而保证这个构造方法能由其子类调用,而不被其他无关的类调用。
关于注意点1和2的代码:abstractclass Employee{ //抽象类:以abstract关键字为开头的类abstractvoid raiseSalary(int i); //抽象方法:只有声明而没有方法体的方法}class Manager extends Employee{ //抽象类的子类void raiseSalaty(int i){ //实现抽象方法System.out.println("hello");}}publicstaticvoid main(String[] args) {Employee e = new Manager(); //创建Employee 子类 Manager的对象Employee e = new Employee(); //错误!Employee为抽象类}抽象类的作用Eg.现在有4 个类,Shape()—形状类Circle()---圆形类Square()---正方形类Triangle()---三角形类在这四个类中Color( ) 属性定义在父类里show( ) 方法可以定义成抽象方法Shape 类是顶层类。
Java语言程序设计形考任务一答案一、单项选择题(30个小题,每题2.5分,共75分)题目1()提供给上层应用进行开发和构建应用的基础类库。
选择一项:A. JDKB.Java应用C.C. JRED.D. JVM正确答案是:JDK题目2Java程序在编译之后,以()方式被Java虚拟机执行。
选择一项:A.文本B.二进制C.字节码D.源代码正确答案是:字节码题目3下列()移动开发平台使用Java语言作为官方推荐开发语言。
选择一项:A.WindowsB.AndroidC.SymbianD.IOS正确答案是:Android题目4Java语言中用来编译Java程序的命令是()。
选择一项:A.javap.exeB. java.exeC. javaw.exeD. javac.exe正确答案是:javac.exe题目5下列()是合法的标识符。
选择一项:A.num_greenB.{printOut}C.23667modityPrice正确答案是:num_green题目6下列()不是保留字选择一项:A.byteB.num_blueC.returnD.private正确答案是:num_blue题目7下列关于float类型float f=5.2的说法,正确的是选择一项:A.错误,变量声明错误B.错误,精度不够,需要强制类型转换floatC.正确D.错误,可以考虑使用int类型正确答案是:错误,变量声明错误题目8下列代码执行的结果中m和n的值分别为()。
int m = 50, n=160; int tmp =m; m=n; n=tmp选择一项:A.160/50B.50/160C.50/50D.160/160正确答案是:160/50题目9表达式29/3*3的值是()。
选择一项:A.27.0B.27C.29D.27.999正确答案是:27题目10执行下列语句:int m=15; int val =m--; val的值是()。
【实验名称】实验3 继承和多态【实验目的】1、理解Java对类的继承使用方式。
2、对照学习和掌握Java对类的对象使用和继承使用方式。
3、学习和掌握Java继承的实现方法。
4、初步学习Java基于继承和多态的通用程序设计方法。
【实验日期和时间记录】实验预习时间:2014.5.14—2014.5.21实验过程时间:2014.5.23 20:00—22:42【实验内容】1、(账户类Account)根据编程练习8.7(P238),实现一个账户类Account。
第一步,根据编程练习8.7的描述,画出Account类的UML类图。
第二步,编写实现Account类。
第三步,编写Account类的测试程序,测试Account类的基本功能。
【实验预习】1.问题描述:创建一个Account类,打印余额、月利息以及这个账户的开户日期。
2.输入的是ID号,余额,年利率及取款额和存款额;处理:调用Account类中的函数输出:输出余额,月利息以及这个账户的开户日期3.技术支持:访问器及修改器;类和对象的建立;调用方法等。
4.具体过程:画出类的UML图,然后写代码:先写account类,在写主方法;5:日期及时间:2014.5.23 20:00—22:42【UML图】【附程序代码】public class testAccount{public static void main(String[]args){Account account=new Account(1122,20000);//创建一个账户ID为1122,余额为20000美元的对象account.setAnnualInterstRate(4.5);//该对象的年利率为4.5%account.withDraw(2500);//取款2500美元account.deposit(3000);//存款3000美元System.out.println("账户余额:"+account.getBalance());//打印账户余额System.out.println("月利息:"+account.getMonthlyInterstRate()*account.getBalance());//打印月利息System.out.println("账户开户日期:"+account.getDateCreated());//打印账户开户日期}}import java.util.Date;//定义一个account类public class Account{private int id=0;private double balance=0;private double annualInterstRate=0;private Date dateCreated=new java.util.Date();//构建一个默认账户public Account(){dateCreated=new java.util.Date();}//构建一个指定ID和账户余额的账户public Account(int newId,double newBalance){dateCreated=new java.util.Date();id=newId;balance=newBalance;}//返回这个账户的IDpublic double getId(){return id;}//设置这个账户的IDpublic void setId(int newId){id=newId;}//返回这个账户的余额double getBalance(){return balance;}//设置这个账户的余额public void setBalance(double newBalance){balance=newBalance;}//返回这个账户的年利率public double getAnnualInterstRate(){return annualInterstRate;}//设置这个账户的年利率public void setAnnualInterstRate(double newAnnualInterstRate){ annualInterstRate=newAnnualInterstRate;}//返回这个账户的开户日期public Date getDateCreated(){return dateCreated;}//返回这个账户的月利率public double getMonthlyInterstRate(){return getAnnualInterstRate()/1200;}//提取账户的现金public void withDraw(double amount){balance-=amount;}//向账户存储现金public void deposit(double amount1){balance+=amount1;}}【实验过程与结果记录】在实验过程,遇到的问题有:不会应用Date类,同时单词拼写错误;解决方法是:对于该题的dateCreated类,是一个实例属性,所以不能作为类属性,不能在类中构造,而应写在构造方法中。
北邮《Java技术》期末复习题(含答案)<>综合练习题填空题1. Java 不仅仅是一种编程环境,它实际上是一个完整的计算平台,包括完整的程序开发环境和运行环境。
2. 完整的Java体系结构包括四个组件,分别是Java编程语言、Java类文件格式、Java应用程序编程接口和Java虚拟机。
3. Java运行时环境是由Java虚拟机和核心类组合形成的。
4. 在Java类文件中存储的二进制代码称为字节码,它们是JVM的指令。
5. 当Java虚拟机是在主机操作系统上由软件实现时,它实际上是用本地(如C/C++等)语言编写的程序。
6. Java虚拟机主要包括两个模块,一个是类装载器,另一个是执行引擎。
7. 在面向对象系统中,对象是程序的基本组成实体。
8. 对象是程序的基本组成实体,类是创建对象的模板。
9. Java 源程序中的类可以分为两种,分别是系统类和用户自己定义类。
10. 编译程序的时候会自动导入到程序中的系统包是ng。
11. 把基本数据类型包装成类包装成类的好处是可以提供基本数据类型的信息,还可以使用类的方法对数据进行操作。
12. 在Java中,int类型的包装类是Integer, char 类型的包装类是Character。
13. Integer 类的 parseInt( ) 方法的功能是把一个字符串转换为一个整型数据。
14. Java 把数据输出到控制台是使用System.out完成的。
15. Scanner 类是在java.util包中定义的。
16. 创建一个连接到标准输入流对象 System.in 的Scanner 对象的语句是Scanner myScanner = new Scanner(System.in);。
17. 设myS 是一个 Scanner 类的实例,则语句“int x =myS.nextInt();”的作用是读取一个整数,然后把这个整数赋给变量x。
18. Java 提供的专门用于格式化输出数据的方法是System.out.printf()。
详细解析Java抽象类和接口的区别在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制。
正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。
abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstract class和interface的选择显得比较随意。
其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图的理解是否正确、合理。
本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。
理解抽象类abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。
并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。
正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
在面向对象领域,抽象类主要用来进行类型隐藏。
我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。
实验4 抽象类和接口【实验宗旨】每天做一点编程练习。
【实验目的】1、学习和掌握Java抽象类的定义和使用。
2、学习和掌握Java接口的定义和使用。
3、进一步学习和掌握通用程序设计方法。
【实验步骤(解题过程)】参见实验2。
【实验内容】1、(CompareableCirlce类)创建名为CompareableCircle类,它扩展Circle类并实现Compareable接口。
画出UML图,实现compareTo方法,使其可以根据面积比较两个圆。
编写一个测试程序求出CompareableCircle对象的两个实例中的较大者。
说明:⑴来源编程练习(P399))。
⑵接口参见小节(P378)。
⑶Circle类的实现,参见程序清单(P303)。
【实验预习】1.问题描述:该题描述的是创建一个CompareableCircle类来实现两个圆的比较。
2.创建两个CompareableCircle类的实例,利用Comparable接口,并调用ComparableMax方法实现。
【附程序代码】@SuppressWarnings("unchecked")public class testCompareableCircle{etArea())return 1;else if(getArea()<((CompareableCircle)o).getArea())return -1;else return 0;}}public class Circle extends GeometricObject1 {private double radius;public Circle() {}public Circle(double radius) {= radius;}CompareableCircle<<create>>~CompareableCircle(radius: double) +compareTo(o: Object): intetArea())return 1;else if () < ((Circle1)o).getArea())return -1;elsereturn 0;}etArea();}}【UML图】【实验过程与运行结果】在实验过程中,不会编写equals的覆盖方法。
实验4抽象类与接口【实验宗旨】每天做一点编程练习。
【实验目得】1、学习与掌握Java抽象类得定义与使用.2、学习与掌握Java接口得定义与使用。
3、进一步学习与掌握通用程序设计方法。
【实验步骤(解题过程)】参见实验2.【实验内容】1、(pareableCirlce类)创建名为pareableCircle类,它扩展Cir cle类并实现pareable接口。
画出UML图,实现pareTo方法,使其可以根据面积比较两个圆。
编写一个测试程序求出pareableCircle对象得两个实例中得较大者。
说明:⑴来源编程练习14、2(P399))。
⑵java、lang、pareable接口参见14、5小节(P378).⑶Circle类得实现,参见程序清单11、2(P303)。
【实验预习】1.问题描述:该题描述得就是创建一个pareableCircle类来实现两个圆得比较.2.创建两个pareableCircle类得实例,利用parable接口,并调用parableMax方法实现。
【附程序代码】SuppressWarnings(”unchecked")public class testpareableCircle{//主方法ﻩpublic static void main(String[]args){ﻩﻩpareableCircle C1=new pareableCircle(10);ﻩpareableCircle C2=newpareableCircle(3);ﻩﻩSystem、out、println("The maxnium Circle is "+parableMax(C 1,C2)+"得圆");ﻩ}//比较两个圆得大小publicstaticparable parableMax(parableC1,parable C2)ﻩ{ﻩﻩif(C1、pareTo(C2)>0)ﻩﻩreturn C1;ﻩﻩelse return C2;}}public class pareableCircle extends Circle implementsparable{ﻩ//建立个指定半径得圆pareableCircle(double radius){ﻩsuper(radius);}//parable接口得方法public int pareTo(Object o){ﻩif(getArea()〉((pareableCircle)o)、getArea())ﻩreturn 1;ﻩelse if(getArea()<((pareableCircle)o)、getArea())return -1;else return 0;}ﻩ}public class Circle extends GeometricObject1 { private double radius;public Circle() {}public Circle(double radius) {this、radius = radius;}//返回半径public double getRadius(){return radius;}//设置一个新得半径public void setRadius(double radius) {this、radius = radius;}//返回圆得面积publicdouble getArea(){return radius * radius * Math、PI;}//返回圆得直径public double getDiameter() {return2*radius;}//返回圆得周长public double getPerimeter() {return 2* radius * Math、PI;}//打印圆得信息public String toString() {return "created in”+getDateCreated() + " andthe radius is " + radius;}}【Uml图】CompareableCircle<<create>>~CompareableCircle(radius: double)+compareTo(o: Object): int【实验过程及运行结果】在运行过程中遇到得错误就是,在写parableMax方法时,我写得返回值就是parableCircle类型。
应该返回值得类型就是parable类型。
这样直接调用了它得ToString方法. 2、(将Circle类变成可比较得)改写程序清单11-2(P303)中得Circle 类,它扩展G eometricObject类(程序清单14—1(P371)),并实现pareable接口。
覆盖Object类中得equals方法。
当两个Circle对象所表示得圆得半径相等时,则这两个对象就是相同得。
画出包括Circle、Geom etricObject与pareble得UML图.编写测试程序,判断两个圆就是否相同。
如果不同,按照练习1得思路,比较两个圆对象得大小.(来源:编程练习14、5(P399))。
【实验预习】1.问题描述:创建Circle类,比较两个圆得大小。
2.创建两个Circle类得实例,调用pareTo方法与equals方法,比较两个圆得大小。
【附程序代码】public classtestCircle2{public static void main(String[]args){ﻩCircle1C1=new Circle1(2);//建立一个半径为2得圆Circle1 C2=newCircle1(3);//建立一个半径为3得圆ﻩﻩSystem、out、println(C1、equals(C2));ﻩSystem、out、println(C1、pareTo(C2);}}public class Circle1 extends GeometricObject implements parable{private doubleradius;public Circle1() {}public Circle1(doubleradius){this、radius = radius;}//返回半径public double getRadius() {returnradius;}//设置一个新得半径public void setRadius(double radius) {this、radius = radius;}//返回圆得面积publicdoublegetArea() {return radius * radius * Math、PI;}//返回圆得直径public double getDiameter(){return 2 * radius;}//返回圆得周长public double getPerimeter() {return 2 * radius *Math、PI;}//打印圆得信息public String toString(){return "created in" + getDateCreated()+” andthe radius is ” + radius;}//parable接口得方法public int pareTo(Object o){if(this、getArea() > ((Circle1)o)、getArea()) return1;else if (this、getArea() <((Circle1)o)、getArea()) return -1;elsereturn 0;}//覆盖Object中得equals方法public boolean equals(Object o) {return this、getArea()== ((Circle1)o)、getArea(); }}【UML图】【实验过程与运行结果】在实验过程中,不会编写equals得覆盖方法.解决方法:应该就是写成; public boolean equals(Object o) { return this、getArea() == ((Circle1)o)、getArea();}3、(求几何对象得面积之与)编写一个方法,求数组中所有几何对象得面积之与。
方法签名如下:public static double sumArea(GeometricObject[] a)编写测试程序,创建4个对象(两个圆形与两个矩形)得数组,然后使用sumArea 方法求它们得总面积。
说明:⑴来源:编程练习14、8(P400);⑵分别实现Geometric Object 类(程序清单14-1(P372))、Rectangle类(程序清单11-3(P305))与Circle类(程序清单11-2(P303));⑶建立GeometricObject类层次结构(图14-2(P372))。
【附程序代码】public class Area{public static void main(String[] args){new Area();}publicArea(){GeometricObject[]a = {new Circle(5), new Circle(6), new Rectangle(2, 3), new Rectangle(2, 3)};System、out、println("The total area is " +sumArea(a));}public static double sumArea(GeometricObject[]a){ double sum = 0;for (int i = 0;i< a、length; i++)sum += a[i]、getArea();return sum;}//矩形类class Rectangle extends GeometricObject {privatedouble width;private doubleheight;//创建一个指定长与宽得矩形public Rectangle(double width,double height){this、width= width;this、height = height;}//返回矩形得宽public doublegetWidth() {return width;}//设定矩形得宽public void setWidth(doublewidth){this、width = width;}//返回举矩形得高public double getHeight() {return height;}//设定矩形得高public void setHeight(double height) {this、height = height;}//返回矩形面积public double getArea() {return width*height;}//求矩形得周长public double getPerimeter() {return 2*(width + height);}//覆盖equals方法public booleanequals(Rectangle rectangle) {return (width == rectangle、getWidth()) &&(height == rectangle、getHeight());}//返回基本信息public String toString() {return "[Rectangle] width = " + width +" and height =" + height;}}}【运行结果】【思考题】1、练习1与练习2中,使用了不同得方法建立了可比较得Circle类。