北京信息科技大学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)。
实验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类。