第08章_课后作业_抽象类、接口、包和常用API
实验五抽象类、包与接口

实验五抽象类、接口与包一、实验目的1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
4、熟练掌握内部类inner class的概念。
5、熟练掌握递归的概念。
6、理解面向对象的程序设计方法。
二、实验内容与要求1.编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特点。
2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
提示:从键盘上输入双精度数的一种方法(程序片段)……public static void main(String args[]) throws IOException{BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));String x;x=keyin.readLine();double a=Double.parseDouble(x);……3.练习ng.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。
获取类的描述信息。
4、编写一个应用程序,实现以下功能:①声明一个接口(Calculability),接口中包含一个方法area()。
②声明一个三角形类继承该接口,类名为Triangle,类中包含两个变量、一个带参数的构造方法和一个计算三角形面积的方法:三角形的底边长w三角形的高h构造方法Triangle(double width,double height)。
计算三角形面积的方法area(),该方法覆盖接口(Calculability)的同名方法,计算三角形的面积(w*h/2)。
作业5--包、接口与异常处理(exception)--参考答案

实验 5 Java包、接口和异常处理的练习一、实验目的了解Java 中包(package)、接口(interface)和异常处理(exception)的作用,掌握包、接口、异常处理的设计方法。
二、实验要求1.了解Java 系统包的结构。
2.掌握创建自定义包的方法。
3.掌握使用系统接口的技术和创建自定义接口的方法。
4.理解系统异常处理的机制和创建自定义异常的方法。
三、实验内容(一)了解并使用 Java 的系统包包是类和接口的集合。
利用包可以把常用的类或功能相似的类放在一个包中。
Java 语言提供系统包,其中包含了大量的类,可以在编写Java 程序时直接引用它们。
为便于管理和使用它们,将这些类分为了不同的包。
包又称类库或API 包,所谓API(Application Program Interface)即使用程序接口。
API 包-方面提供丰富的类和方法供大家使用,如画图形、播放声音等,另一方面又负责和系统软硬件打交道,圆满实现用户程序的功能。
所有Java API 包都以"java."开头,以区别用户创建的包。
接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到和多重继承相同的功能。
处理程序运行时的错误和设计程序同样重要,只有能够完善处理运行时出错的程序,软件系统才能长期稳定地运行,异常处理就是说明如何处理程序运行时出错的问题。
(二)创建并使用自定义包1.自定义包的声明方式<package> <自定义包名>声明包语句必须添加在源程序的第一行,表示该程序文件声明的全部类都属于这个包。
2.创建自定义包Mypackage在存放源程序的文件夹中建立一个子文件夹Mypackage。
例如,在"E:\java\程序"文件夹之中,创建一个和包同名的子文件夹Mypackage(E:\java\程序\Mypackage),并将编译过的class 文件放入该文件夹中。
JAVA包接口与抽象类

JA V A包、接口与抽象类【概述】包(Package)定义了软件单元,它能够独立发布,并能够与其它包组成应用程序,包的成员是一些相关联的类、接口,也可包含包中的类所使用的附加资源文件。
在Java程序的第一行代码,可以通过以下代码来申明源程序中所创建类型的包。
package 包名;如果某个Java程序源代码中没有上面的package 包名;那么这个源代码中定义的所有类型都属于一个默认包(default package)。
【包的主要作用】1.包将相互关联的接口和类结合成组。
2.包创建了命名空间来避免类型之间的命名冲突。
在一个包中的接口和类可以使用流行的公共名字来命名,而这些命名只在一个包内才有意义,在不同的包之间则可以有相同的命名。
3.包机制为开发应用提供了保护域。
包内的代码通过访问标志可以相互协作,而这些标志对外部代码是不可用的【包的命名约定】♦如果包名为c,那么相应的编译出的.class文件必须位于某个工作目录下的aaa\bbb\ccc目录里面或者某个Jar文件的aaa\bbb\ccc目录里面。
♦可以采用Internet域名反序,比如,可以将包命名为.zucc; 虽然这种命名模式使得包名变得很长,但却不容易重名。
【执行包中的类文件】对于包c中定义的某个类A,那么类文件A.class必定位于(1)工作目录下的aaa\bbb\ccc目录里面,或者(2)某个Jar文件中的aaa\bbb\ccc目录里面。
对于前一种情况,可以在命令提示符下,敲入java –cp 工作目录c.A 执行类A。
比如,如果工作目录是d:\test,那么可以键入java –cp d:\test c.A执行类A;如果命令提示符当前目录就是工作目录d:\test, 那么可以省去-cp d:\test, 而仅仅需要键入java c.A对于后一种情况,可以在命令提示符下,敲入下面命令可以执行类A;java –cp jar文件的路径文件名c.A比如,类文件A.class位于已经打包的jar文件abc.jar中,而abc.jar位于目录d:\test, 那么就可以键入如下命令来执行A.classjava –cp d:\test\abc.jar c.A【使用包成员(导入类型方式)】对于其它包中定义的类型,可以程序中使用类型的完全限定名(Fully qualified name, 即包名.类型名)来申明和使用类型;如果不想在程序中使用完全限定名(因为完全限定名比较长),而是希望通过简单的类型名来申明和使用其它包中的类型,那么可以通过import 语句将程序中使用到的类型(一般位于其它包)导入到当前程序中。
3第三章:抽象类、接口和包

return this.width*this.height; } }
《JAVA程序设计》课程
3.1 抽象类
③定义继承Shape的子类圆形类Circle
public class Circle extends Shape { //定义私有的实例变量r,表示圆的半径 private double r; //定义一个参数的构造方法 public Circle(double r){ this.r=r; }
public class Dog extends Animal { public Dog(String n) { super(n); } @Override
《JAVA程序设计》课程
3.1 抽象类
public void eat(){ //实现抽象类的抽象方法 System.out.println(name + "啃骨头");
《JAVA程序设计》课程
3.1 抽象类
//定义抽象类Shape public abstract class Shape {
public abstract double area();//抽象方法 }
②定义继承Shape的子类矩形类Rectangle public class Rectangle extends Shape {
} } (3)定义第二个子类Cat,继承自Animal,并实现Animal类中的抽象方法,代码如下:
public class Cat extends Animal { public Cat(String n) { super(n); }
《JAVA程序设计》课程
3.1 抽象类
@Override public void eat() { System.out.println(name + "吃鱼"); }
《Java程序设计》第8章 抽象类、接口、包和常用API

parseShort(String s); parseLong(String s); parseDouble(String s);
创建一个包装类对象
Integer.valueOf(int); Long.valueOf(long);Short.valueOf(short)
Byte.valueOf(byte); Float.valueOf(float);Double.valueOf(double);
public static void main(String args[]){ Test t = new Test(); //Test类在p1包中定义 t.display();
} }
19
Inspur Education
包装类
基本数据类型只是纯粹的数据,除了自身数据信息之外 ,没有其他信息。包装类使他们可以以对象的形式存在 ,携带更多的信息并提供相对应的操作方法。
18
Inspur Education
包(package)
导入包
为使用定义在不同包中的Java类,需用import语句来引入所需要 的类。
语法格式: import package1[.package2…]. (classname |*);
应用举例:
import p1.Test; //import p1.*; public class TestPackage{
步骤一:定义Animal接口,包含方法eat(Food food); 步骤二:定义类Dog和Cat让其实现接口Animal; 步骤三:定义抽象类Food,包含属性name及setName()、getName ()方法 步骤四:定义实现类Fish及Boner实现Food类 步骤五:定义Feeder类,包含方法feed(Animal animal, Food food) 步骤六:定义TestFeeder类(该类测试饲养员给动物喂食物)
第08章_课后作业_抽象类、接口、包和常用API

6.下面哪些类实现了下列接口(D) 。 interface J_Interface{ int mb_method(int data); int mb_function(int index); } A.class J_Class implements J_Interface{ int mb_method(){return 1;} int mb_function(){return 2;} } B.class J_Class extends J_Interface{ int mb_method(int data){return 1;} int mb_function(int index){return 2;} } C.class J_Class implements J_Interface{ int mb_method(int data){return 1;} int mb_function(int index){return 2;} } D.class J_Class implements J_Interface{ public int mb_method(int index){return 1;}; public int mb_function(int data){return 2;}; } 7.public interface Foo{ int k = 4; } 下面哪一项与以上接口中的第二行不等价?D A.final int k = 4; B.public int k = 4; C.static int k = 4; D.private int k = 4; 8.下列程序运行的结果是(A) 。 interface InterfaceA{ int max=100; } class ClassA implements InterfaceA{} class ClassB extends ClassA{} public class E { public static void main(String[] args) { ClassB b=new ClassB(); System.out.print(b.max); System.out.print(" "+ClassB.max); System.out.print(" "+ClassA.max); System.out.print(" "+InterfaceA.max); } }
什么是抽象类什么是接口两者有什么区别?如何使用它

什么是抽象类什么是接⼝两者有什么区别?如何使⽤它⼀、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象⽅法,这是普通类所不能的。
抽象⽅法只能声明于抽象类中,且不包含任何实现,派⽣类必须覆盖它们。
另外,抽象类可以派⽣⾃⼀个抽象类,可以覆盖基类的抽象⽅法也可以不覆盖,如果不覆盖,则其派⽣类必须覆盖它们。
⼆、接⼝:接⼝是引⽤类型的,类似于类,和抽象类的相似之处有三点:1、不能实例化;2、包含未实现的⽅法声明;3、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅是⽅法包括其他成员);另外,接⼝有如下特性:接⼝除了可以包含⽅法之外,还可以包含属性、索引器、事件,⽽且这些成员都被定义为公有的。
除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。
⼀个类可以直接继承多个接⼝,但只能直接继承⼀个类(包括抽象类)。
三、抽象类和接⼝的区别:1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.⽽接⼝只是⼀个⾏为的规范或规定,微软的⾃定义接⼝总是后带able字段,证明其是表述⼀类类“我能做。
”.抽象类更多的是定义在⼀系列紧密相关的类间,⽽接⼝⼤多数是关系疏松但都实现某⼀功能的类中.2.接⼝基本上不具备继承的任何具体特点,它仅仅承诺了能够调⽤的⽅法;3.⼀个类⼀次可以实现若⼲个接⼝,但是只能扩展⼀个⽗类4.接⼝可以⽤于⽀持回调,⽽继承并不具备这个特点.5.抽象类不能被密封。
6.抽象类实现的具体⽅法默认为虚的,但实现接⼝的类中的接⼝⽅法却默认为⾮虚的,当然您也可以声明为虚的.7.(接⼝)与⾮抽象类类似,抽象类也必须为在该类的基类列表中列出的接⼝的所有成员提供它⾃⼰的实现。
但是,允许抽象类将接⼝⽅法映射到抽象⽅法上。
8.抽象类实现了oop中的⼀个原则,把可变的与不可变的分离。
抽象类和接⼝就是定义为不可变的,⽽把可变的座位⼦类去实现。
Java上第九章 抽象类、接口和包

包 - 2
范例解析: 例如:编写一个测试文件Temp.java。 package cn.hope; public class Temp{ public void testPackage(){ System.out.println(“testing……”); } }
包 - 3
编译Temp.java文件。 javac –d . Temp.java 其中 –d 是带包编译的参数 . 是包依托路径,“.”代表当前文件夹 编译结果会在当前文件夹下生成cn子文件 夹,在cn下生成hope文件夹,在hope文件夹 中存放Temp.class文件。
接口 - 4
使用接口:
练习:让Person类实现Running接口。 public class Person implements Running{ public void running(){ System.out.println("person run……"); } }
包 ห้องสมุดไป่ตู้ 1
包是类的容器,是一系列相关类和接口的 集合,也是对类的一种更大的封装。 使用包的主要原因是要保证类名的唯一性 ,即“防止命名混乱”和“控制包中成员的 可访问性”。 语法:package 包名[.子包名[.子包名[…]]]
抽象类 - 2
抽象类的语法: [修饰符] abstract class 类名 [extends …][implements …]{ }
例如: public abstract class Animal{ public abstract void sound(); }
抽象类 - 3
定义抽象类的子类: public class Cat extends Animal{ public void sound(){ System.out.println("miao……"); } } 练习:另外定义Animal类的两个子类,覆 盖sound方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public void f(){System.out.print(max);} } class ClassB{ void g(InterfaceA a){a.f();} } public class E { public static void main(String[] args) { ClassB b=new ClassB(); b.g(new ClassA()); } } A.编译正确,但无运行结果 B.100 C.编译错误:b.g(new ClassA()) D.以上都不对 3.下列有关抽象类与接口的叙述中正确的是哪一个(D) 。 A.抽象类中必须有抽象方法,接口中也必须有抽象方法。 B.抽象类中可以有非抽象方法,接口中也可以有非抽象方法。 C.抽象类中的变量定义时必须初始化,而接口中不是。 D.含有抽象方法的类必须是抽象类,接口中的方法必须是抽象方法。 4.从下列程序中你发现了几处错误(D) 。 abstract class A{ public abstract void f(){}; } class B extends A{ void f(){ System.out.print("I am subclass"); } } public class E { public static void main(String[] args) { A a=new A(); a.f(); } } A.1 B.2 C.3 D.4 5.下列叙述正确的是(A) 。 A.一个类只可以继承另一个类,但可以实现多个接口。 B.抽象类可以定义为 final 类,但抽象方法不可以定义为 final 方法。 C.一个类实现了一个接口,那么这个类必须实现这个接口的所有接口方法。 D.类可以继承另一个类,但接口不可以继承另一个接口。
三、选择题
1.在使用 interface 声明一个接口时,只可以使用哪个修饰符修饰该接口(D) 。 A.private B.protected C.private protected D.public 2.下列程序运行的结果是(B) 。 interface InterfaceA{ int max=100; void f(); } class ClassA implements InterfaceA{
A.100 100 100 100 B.编译错误:max 在类 ClassB 没有定义 C.编译错误:max 不能通过对象名 b 来访问 D.编译错误:max 不能通过接口名 InterfaceA 来访问 9.下列程序运行的结果是(C) 。 interface InterfaceA{ int max=100; void f(); } interface InterfaceB extends InterfaceA{ void g(); } class ClassA implements InterfaceB{ public void g(){ System.out.print("I am ClassA"); } } public class E { public static void main(String[] args) { ClassA a=new ClassA(); a.g(); } } A.I am ClassA B.编译错误:InterfaceB 不能继承 InterfaceA C.编译错误:ClassA 没有实现接口方法 f D.以上都不对 10.下列程序运行结果是(A) 。 interface InterfaceA{ int max=100; void f(); } abstract class ClassA{ abstract void g(); } class ClassB extends ClassA implements InterfaceA{ void g(){System.out.print(max);} public void f(){System.out.print(" "+max);} } public class E { public static void main(String[] args) { ClassA a=new ClassB(); InterfaceA b=new ClassB(); a.g();
二、简答题
1. 举出常用的类、包及接口,各举出 5 个。 2. 抽象类和接口之间的区别? 3. 抽象类可以为 final、private? 4. String s = new String("xyz");创建了几个对象? 5. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class) 6.是否可以继承 String 类?
6.下面哪些类实现了下列接口(D) 。 interface J_Interface{ int mb_method(int data); int mb_function(int index); } A.class J_Class implements J_Interface{ int mb_method(){return 1;} int mb_function(){return 2;} } B.class J_Class extends J_Interface{ int mb_method(int data){return 1;} int mb_function(int index){return 2;} } C.class J_Class implements J_Interface{ int mb_method(int data){return 1;} int mb_function(int index){return 2;} } D.class J_Class implements J_Interface{ public int mb_method(int index){return 1;}; public int mb_function(int data){return 2;}; } 7.public interface Foo{ int k = 4; } 下面哪一项与以上接口中的第二行不等价?D A.final int k = 4; B.public int k = 4; C.static int k = 4; D.private int k = 4; 8.下列程序运行的结果是(A) 。 interface InterfaceA{ int max=100; } class ClassA implements InterfaceA{} class ClassB extends ClassA{} public class E { public static void main(String[] args) { ClassB b=new ClassB(); System.out.print(b.max); System.out.print(" "+ClassB.max); System.out.print(" "+ClassA.max); System.out.print(" "+InterfaceA.max); } }
抽象类、接口、包和常用 API
知识点:抽长度栈和动态栈,完成入栈和出栈。 (注:测试接口。 ) 2. 编写一个方法,输出在一个字符串中,指定字符串出现的次数。 3. 1)编 2 个接口:InterfaceA 和 InterfaceB; 在接口 InterfaceA 中有个方法 void pintCapitalLetter(); 在接口 InterfaceB 中有个方法 void pintLowercaseLetter(); 2)然后写一个类 Print 实现接口 InterfaceA 和 InterfaceB, 要求 pintCapitalLetter()方法实现输出大写英文字母的功能, pintLowercaseLetter()方法实现输出小写英文字母的功能。 3)再写一个主类 E,在主类 E 的 main 方法中创建 Print 的对象并赋值给 InterfaceA 的 变量 a,对象 a 调用 pintCapitalLetter 方法; 4)最后再在主类 E 的 main 方法中创建 Print 的对象并赋值给 InterfaceB 的变量 b, 对象 b 调用 pintLowercaseLetter 方法。
b.f(); } } A.100 100 B.编译正确,但无运行结果 C.编译错误:InterfaceA b=new ClassB(); D.以上都不对 11. 已知: interface I { } class A implements I { } class B extends A { } class C extends B { public static void main(String[] args) { B b = new B(); _____________ } } 在横线处添加哪条语句运行时会产生异常 (A)A a = b; (B)I i = b; (C)C c = (C)b; (D)B d = (B)(A)b; 12. 已知: class Animal { public abstract String noise(); } class Dog extends Animal { public String noise() { return “wang wang”;} } class Cat extends Animal { public String noise() { return “miao miao”; } } class C { public static void main(String[] args) { Animal animal = new Cat(); Dog dog = (Dog)animal; System.out.println(dog.noise()); } } 的输出为 (A)wang wang (B)maio miao (C)编译错误 (D)运行时异常