抽象类和接口习题

合集下载

实验五抽象类、包与接口

实验五抽象类、包与接口

实验五抽象类、接口与包一、实验目的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)。

Java面试题(七):接口和抽象类的区别

Java面试题(七):接口和抽象类的区别

Java⾯试题(七):接⼝和抽象类的区别1. 接⼝和抽象类的区别抽象类可以存在普通成员函数,⽽接⼝中只能存在public abstract⽅法抽象类中的成员变量客户是各种类型的,⽽接⼝中的成员变量只能是public static final类型的抽象类只能继承⼀个,接⼝可以实现多个接⼝的设计⽬的,是对类的⾏为进⾏约束(更准确的说是⼀种"有"约束,因为接⼝不能规定类不可以有什么⾏为),也就是提供⼀种机制,可以强制要求不同的类具有相同的⾏为。

它只约束了⾏为的有⽆,但不对如何实现⾏为进⾏限制。

⽽抽象类的设计⽬的,是代码复⽤。

当不同的类具有某些相同的⾏为(记为⾏为集合A),且其中⼀部分⾏为的实现⽅式⼀致时(A的⾮真⼦集,记为B),可以让这些类都派⽣于⼀个抽象类。

在这个抽象类中实现了B,避免让所有的⼦类来实现B,这就达到了代码复⽤的⽬的。

⽽A减B的部分,留给各个⼦类⾃⼰实现。

正是因为A-B在这⾥没有实现,所以抽象类不允许实例化出来(否则当调⽤到A-B时,⽆法执⾏)。

抽象类是对类本质的抽象,表达的是is a 的关系,⽐如:绵⽺is a ⽺。

抽象类包含并实现⼦类的通⽤特性,将⼦类存在差异化的特性进⾏抽象,交由⼦类去实现。

⽽接⼝是对⾏为的抽象,表达的是like a 的关系。

⽐如:鸟 like a 飞⾏器(向飞⾏器⼀样可以飞),但其本质上是is a 鸟。

接⼝核⼼是定义⾏为,即实现类可以做什么,⾄于实现类主体是谁、是如何实现,接⼝并不关⼼。

使⽤场景:当你关注⼀个事物的本质的时候,⽤抽象类;当你关注⼀个操作的时候,⽤接⼝。

抽象类的功能要远超过接⼝,但是,定义抽象类的代价⾼。

因为⾼级语⾔(从实际设计上来说也是)每个类只能继承⼀个类。

在这个类中,你必须继承或编写出其所有⼦类的所有共性。

虽然接⼝在功能上会弱化许多,但是它只针对⼀个动作的描述。

⽽且你可以在⼀个类中实现多个接⼝。

在设计阶段会降低难度。

实验13 抽象类和接口

实验13 抽象类和接口

实验13 接口一、实验目的(1)熟悉接口的定义方法。

(2)了解Java语言实现多继承的途径。

二、实验内容第一题:学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的被管理和对于教师的责任管理在他们身上都有体现。

(1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。

其中,StudentInterface接口包括setFee( )方法和getFee( )方法,分别用于设置和获取学生的学费:TeacherInterface接口包括setPay( ) 方法和getPay( ) 方法,分别用于设置和获取老师的工资。

(2)定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。

(3)创建一个姓名为“zhangsan"的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。

要求:(1)在Graduate中实现各个接口定义的抽象方法。

(2)对年学费和年收入进行统计,用收入减去学费,如果小于2000元则显示“providea loan”信息。

第二题:定义一个抽象类Bank,它包含有oneyearRate(定期利率)、oneyearNationaldebt(国债利率)和interestRate(活期利率)常数和count()方法及show()方法。

Count()方法用语对本息合计(存款本金+利息)进行计算,而show()方法用于对本息合计进行显示。

由于对不同的存款方式,利率是不同的,因此此程序分别定义多个子类实现对抽象类的继承,实现对利率的计算和显示。

注意:本程序定义了定期利率、活期利率、国债利率三种利率,按照一万元钱位存款单位进行统计,计算每种利率下存款一年后的本息合计。

java面向对象编程、类的封装、接口和基本类库练习题

java面向对象编程、类的封装、接口和基本类库练习题

面向对象编程基本知识练习一、判断题1.不需要定义类,就能创建对象。

()2.构造方法用于给类的private 实例变量赋值。

()3.对象一经声明就可以立即使用。

()4.在定义变量和方法时,必须清楚地在其面前标上访问权限修饰符。

()5.Java 程序中的参数传递都是把参数值传递给方法定义中的参数。

()6.在类定义中,成员访问权限修饰符不能多次出现。

()7.new 操作符动态地为对象按其指定的类型分配内存,并返回该类型的一个引用。

()8.类的方法通常设为public,而类的实例变量一般也设为public。

()9.构造方法在创建对象时被调用。

()10.通过点运算符与类对象的引用相连,可以访问此类的成员。

()11.声明为protected 的类成员只能被此类中的方法访问。

()12.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间。

()13.类的成员变量可以放在类体的任意位置。

()14.声明为protected 的类成员可以被此类作用域中的任何对象访问。

()15.没有返回值的方法可以用void 来表示,也可以不加。

()二、选择题1. 下面对对象概念描述错误的是:( )A 操作是对象的动态属性B 任何对象都必须有继承性C 对象间的通讯靠消息传递D 对象是属性和方法的封装体2.编译并运行下面的程序,运行结果为:( )public class A{public static void main(String[] args){A a=new A();a.method(8);}void method(int i){System.out.println(“int:“+i);}void method(long i){System.out.println(“long:“+i);}}A 程序可以编译运行,输出结果为int:8B 程序可以编译运行,输出结果为long:8C 程序有编译错误,因为两个method()方法必须定义为静态(static)的D 程序可以编译运行,但没有输出3.下面关于类的说法不正确的是:()A 类是Java 语言中的一种复合数据类型B 类中不包含数据变量和方法C 类是对所有具有一定共性的对象的抽象D Java 语言的类只支持单继承4.能作为类及其成员的修饰符是:()A interfaceB classC protectedD public5.设x、y 均为已定义的类名,下列声明对象x1 的语句不可能正确的是:()A public x xl=new y();B public y xl=new x();C x xl=new x();D x xl=x();6.面向对象程序设计技术的特点是:()A 可重用性B 可维护性C 表示方法的一致性D 可重用性、可维护性、表示方法的一致性7.下列方法定义中,方法头不正确的是:()A public static x(double a){…}B public static int x(double y){…}C void x(double d)D public int x(){…}8.设已声明了一个类A 的两个对象al、a2,为了初始化a1 和a2,下面语句正确的是:()A al=new(); a2=new();B al=A new(); a2=A new();C al,a2=new A();D al=new A(); a2=new A();9.构造方法何时被调用?()A 类定义时B 使用对象的变量时C 调用对象方法时D 创建对象时10.下列哪个类声明是正确的?()A public abstract class Car{…}B abstract private move(){…}C protected private number;D abstra ct final class Hl{…}11.下列不属于面向对象程序设计的基本特征的是:()B 封装C 继承D 静态12.请看下面的程序段class Person {String name,department;int age;public Person(String n) { name = n; }public Person(String n,int a) { name = n; age = a; }public Person(String n,String d,int a) {//doing the same as two arguments version of constructer//including assignment name=n,age=a}}下面那一选项可以添加到“//doing the same……”处:()A Person(n,a)B this(Person(n,a))C this(n,a)D this(name.age)13.()是一个特殊的方法,用于对类的实例变量进行初始化。

java接口练习题

java接口练习题

java接口练习题一、问题描述在Java中,接口是一种定义一组方法的抽象类型。

接口并不提供任何实现,而是定义了一系列方法的声明。

请按照以下要求完成接口的练习题。

二、题目一定义一个接口Animal,包含以下方法声明:1. void eat(): 表示动物进食的方法;2. void move(): 表示动物移动的方法。

三、题目二定义一个接口Flyable,继承自Animal接口,添加以下方法声明:1. void fly(): 表示动物飞行的方法。

四、题目三定义一个类Bird,并实现Animal和Flyable接口。

在Bird类中实现以上接口的所有方法,并给出方法体。

另外,Bird类还包含一个名为name的成员变量,并提供相应的getter和setter方法。

五、题目四定义一个测试类InterfaceExercise,包含main方法。

在main方法中创建一个Bird对象,并调用其eat、move和fly方法。

同时,设置Bird对象的name属性,并使用getter方法获取其值,并将结果打印输出。

六、编写代码请按照以上题目描述的要求,编写Java代码实现题目中的各个部分。

```java// 题目一interface Animal {void eat();void move();}// 题目二interface Flyable extends Animal {void fly();}// 题目三class Bird implements Flyable {private String name;@Overridepublic void eat() {System.out.println("Bird is eating."); }@Overridepublic void move() {System.out.println("Bird is moving."); }@Overridepublic void fly() {System.out.println("Bird is flying."); }public void setName(String name) { = name;}public String getName() {return name;}}// 题目四public class InterfaceExercise {public static void main(String[] args) {Bird bird = new Bird();bird.eat();bird.move();bird.fly();bird.setName("Sparrow");String name = bird.getName();System.out.println("Bird's name is: " + name);}}```七、运行结果在命令行或IDE中运行InterfaceExercise类的main方法后,将会输出以下结果:```Bird is eating.Bird is moving.Bird is flying.Bird's name is: Sparrow```通过以上练习,你已经学会了如何定义接口、继承接口、实现接口以及如何在Java中使用接口。

《Java面向对象程序设计》课件-第5章 抽象类与接口

《Java面向对象程序设计》课件-第5章 抽象类与接口

1.[单选题]下列关于抽象类的描述,错误的是_________。
A.抽象类中有抽象方法
B.用abstract修饰的类是抽象类
C.抽象方法没有方法体
D.抽象类可以用来实例化对象
2.[单选题]下列关于抽象类定义,正确的是__________。
A.abstract AbstractClass{
abstract void method();
《Java面向对象程序设计》
第5章 抽象类与接口
1
内容导览
2
主要内容
5.1 引例 5.2 抽象类 5.3 接口 5.4 集合框架 5.5 实例
3
5.1 引例
4
引例
例5.1 设计一款电子游戏,游戏中有不同类型怪物,如英雄、 火龙、天使、僵尸等。这些角色既有共同的行为,如战斗; 当然,不同角色也有不同行为,如英雄具有战斗、游泳、飞 行等功能。请试着设计游戏,能够让系统灵活,易于扩展, 如游戏升级时能方便及增加新的角色;同时,有利于编程, 能够让多个人一起协同开发。
Set接口可以存储一组唯一、无序的对象 Set接口继承了Collection接口 Set接口的常用实现类是HashSet类
Set<String> set=new HashSet<String>();
25
5.4.5 Map接口
Map集合类用于存储元素对(称为键—值对)
方法名称
主要功能
Object put(Object key,Object value) 以键-值对的方式进行存储
A.接口就是抽象类,两者在使用上没有区别
B.接口是一种特殊的抽象类,只有常量定义和方法声明
C.抽象类不能用来实例化一个对象,只能通过继承来实现它的方法

java接口练习题

java接口练习题Java接口练习题Java是一门广泛应用于软件开发的编程语言,而接口是Java中重要的概念之一。

接口可以被理解为一种契约,定义了类之间的通信规则。

通过接口,我们可以实现类与类之间的解耦,提高代码的可复用性和可维护性。

在这篇文章中,我们将通过一些练习题来加深对Java接口的理解。

1. 定义一个接口Shape,其中包含一个计算面积的方法calculateArea()和一个计算周长的方法calculatePerimeter()。

然后创建两个类Circle和Rectangle,分别实现Shape接口,并实现接口中的方法。

最后,创建一个测试类,分别创建Circle和Rectangle的对象,并调用它们的计算面积和计算周长的方法。

2. 定义一个接口Animal,其中包含一个发出声音的方法makeSound()。

然后创建两个类Dog和Cat,分别实现Animal接口,并实现接口中的方法。

最后,创建一个测试类,分别创建Dog和Cat的对象,并调用它们的发出声音的方法。

3. 定义一个接口Runnable,其中包含一个运行的方法run()。

然后创建一个类Car,实现Runnable接口,并实现接口中的方法。

在run()方法中,模拟汽车行驶的过程,并输出相应的提示信息。

最后,创建一个测试类,创建Car的对象,并调用它的运行方法。

4. 定义一个接口Sortable,其中包含一个排序的方法sort()。

然后创建一个类BubbleSort,实现Sortable接口,并实现接口中的方法。

在sort()方法中,使用冒泡排序算法对一个整型数组进行排序。

最后,创建一个测试类,创建BubbleSort的对象,并调用它的排序方法。

通过以上练习题,我们可以加深对Java接口的理解。

在第一题中,我们通过实现接口来计算图形的面积和周长,展示了接口的灵活性和可扩展性。

在第二题中,我们通过实现接口来让动物发出声音,展示了接口的多态性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、易错概念题
1.以下方法错误的是(A D)
A 覆盖方法包括成员方法的覆盖和成员变量的覆盖
B 成员方法的覆盖是多态的一种表现形式
C 子类可以调用父类中被覆盖的方法
D 任何方法都可以被覆盖
分析:在子类中调用父类方法使用super关键字。super.a() 就可以调用父类的
a方法。
在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注
意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不
会进行覆盖的。
如果子类本身没有定义使用this关键字可以去访问父类的成员变量。
最后final修饰的方法不能被覆盖 覆盖即重写和重载一起都是多态的表现形式。

(重载、重写和覆盖)
override->重写(=覆盖)、overload->重载、polymorphism -> 多态
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在
继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为
重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符
(public>protected>default>private)。
3、重写的方法的返回值类型必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者
是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,
并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。

overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名
称相同而参数形式不同。
重载的规则:
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参
数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必
须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
对比:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取
得,在子类里各自实现(重写)。

2.下面说法正确的是(C H)
A instanceof 关键字用来判定某个类是否为抽象类。
B final关键字修饰的成员变量不需要初始化。
C 接口的方法都是抽象方法(jdk1.8之前),并且没有方法体
D 当我们继承一个抽象类时,我们必须要实现抽象类的抽象方法。 (X)
E 在向上转型的过程中,如果父类和子类拥有相同的名字的成员方法(非静态)
访问的是子类的该方法。如果父类和子类拥有名字的成员变量时,访问的是子类
的成员变量。(X)
F 内部类访问外部类方法时,不用创建外部类对象直接访问外部类方法。
G 内部类变量不能设置为static(可以),也不能设置为final
H 多态通常用来作为参数传入或者作为返回值返回。

3.下面说法不正确得是(A C D E)
A 不能和abstract一起使用的修饰符有static final public final
B 抽象类之间是继承关系,接口之间也是。
C 接口不能存在普通方法和常量
D局部内部类public,private修饰符修饰 default/static
E接口不可以直接实例化,抽象类可以

4.下面有那些选项是对的(B C E)
A instanceof是一个二元修饰符,作用是用来判断左边的对象是否是右边类的
实例,返回的是布尔类型
B private protected 和static都不可以修饰interface接口(接口的修饰符
只有public)
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D对象是对类的抽象化
E 接口中可以有常量
分析 接口可以有常量(jdk1.8以后) instanceof 是一个二元修饰符,作用是用
来判断左边的对象是否是右边类的实例 或者是右边超类的实例

5.以下说法正确的是 ( B )
对于方法内得形参()
A 必须定义多个形参
B 可以没有
C 至少有一个
D 只能是简单变量

6.以下说法正确的是( C )
A 对于局部内部类,不能在class前加任何修饰符(public default private
protected)来修饰 (static好像可以)
B 只要没有定义不带参数的构造函数,JVM都会为类生成一个默认的构造函数
C 向上转型中,父类与子类拥有相同名字的普通方法时,访问的是子类的成员方

D单例模式中类的构造方法使用private修饰,声明为私有,这样就不能在类的
外部使用new关键字来创建实例对象了

7.final修饰的方法不可重写的(子类不能重写父类final方法,但是可以调用)
8.以下说法正确的是(E G)
A 抽象方法是一种功能契约(功能契约即为接口),不实现抽象方法就无法构造
对象
B 接口中的抽象方法只能是public的,而抽象类中的抽象方法可以用别的修饰
符修饰(还可以是protected)
C 类是对象的抽象模型,刻画了对象中所有信息
D 抽象方法不能用final来修饰 ,可以用satic来修饰
E 对计算公式已不需要更改的数学函数,常用public static final 来修饰;
F 若类中有final abstract来修饰的方法,必须实现该方法才能构造对象。
G 引用是对象的名字,引用值是对象的起始地址

9.下列的说法错误的是(B)
A 抽象类必须被子类继承
B 对象向上转型以后,拥有相同名字的普通成员变量(静态变量)时,访问的是子
类里面的
C super的主要功能是完成子类的调用父类的内容,并且只能放在子类构造方法
的第一行
D 接口的方法必须定义为public权限,并且只能是抽象方法(不考虑jdk1.8)

10.下面那些选项是错误的(A B D E)
A instanceof 是一个二元操作符,只用来判断左边的对象是否是右边的类的实
例,返回是布尔型 (还可以判断是否是右边父类的实例)
B 成员内部类可以使用任何修饰符修饰,可以定义常量和静态变量
C this.属性名访问的是本类中的属性,如果本类中没有,就从父类中继续查找
D 在成员方法里面叫做局部内部类,可以访问外部类属性和使用任何修饰符,但
使用局部内部类方法时 ,必须实例化内部类对象
E 实现内部类的调用,要直接实例化内部类

11 下列定义,正确的有哪些( A B C D)
A接口只能做方法声明,抽象类中就可以做方法实现和方法声明
B 抽象类中的抽象方法只能声明,不能实现.abstract void abc();不能加{}
C 抽象方法要被实现,所以不能是静态的,也不能是私有的
D 接口里只能有公共方法,1.8以后 可以有普通方法和成员变量
E 类实现接口,利用关键字implement 完成 (错误 注意为implements)

12以下说法不正确的有( B C D)
A拥有抽象方法的类为抽象类
B抽象类的方法时抽象方法
C继承抽象类的子类为抽象类
D实现接口的类为抽象类

13 下列说法正确的是 ( A )
A Java程序中的main方法必须写在类里面
B Java程序中可以有多个main方法
C Java程序中类名必须和文件名一样
DJava程序的main方法中如果只有一条语句,可以不用大括号括起来
E在类中声明一个整数数组作为成员变量,如果没有给他赋值,数值元素值为空
F数组本身是一个对象

14 如果在子类继承父类,子类构造方法中没有注明时默认第一行调用父类的无
参构造方法

15 下列说法正确的是(A B C)
A try块不可以省略
B 可以使用多重catch块
C finally块可以省略
D catch块和finally块可以同时省略

16 以下对自定义异常描述正确得是(A C)
A 自定义异常必须继承Exception
B 自定义异常必须继承Error
C 自定义异常可以更加明确地确定异常出错位置和详细信息
D程序中已经提供了丰富的异常类,使用自定义异常没有意义

17在JAVA中关于抽象类的描述正确的说(BD)
A 抽象类可以被实例化
B 如果一个类中有一个方法被声明为抽象的这个类必须是抽象类
C 抽象类的方法必须是抽象的
D 声明抽象类必须带有abstract关键字

相关文档
最新文档