java练习题之接口interface练习

发布时间:2023年12月26日

1:关于接口和抽象类,下列说法正确的是(ACD)

A.抽象类可以有构造方法,接口没有构造方法

B.抽象类可以有属性,接口没有属性

C.抽象类可以有非抽象方法,接口中都是抽象方法????1.8之后

D.抽象类和接口都不能单独创建对象????????抽象类有构造方法 ?可以声明引用但不能创建对象, ?接口无构造方法,但是也可以声明引用

2:下列哪一种叙述是正确的(CD)

A.一个Java 类只能实现一个接口

B.一个Java 类不能同时继承一个类和实现一个接口

C.一个Java 类可以实现多个接口

D.一个Java 类只能直接继承一个类

3:?下列关于接口的说法错误的是(B)

A. 接口不能创建对象,可以声明引用

B. 接口中可以定义构造方法

C. 接口中的属性都是公开、静态常量

D. 接口中的方法都是公开、抽象方法

4:接口和抽象类的区别?

抽象类是类(abstract class) 有构造方法?需要子类继承 extends 里边可以有抽象方法也可以有非抽象的方法,单继承

接口(interface)无构造方法 可以说是都是抽象方法的抽象类 ,全是公有的抽象方法, 需要实现,implements ??实现可以多实现 ??

5:根据要求完成以下代码:

interface IA{

void m1();

void m2();

}

//写出实现类,类名为MyClass

class MyClass implements IA{

public void m1(){}

public void m2(){}

}

6:阅读以下代码

interface IA{

void m1();

void m2();

???? }

???? interface IB extends IA{

void m3();

???? }

class MyClass implements IB{

public void m1(){}

public void m2(){}

public void m3(){}

public void m4(){}

}

???? 在主函数中 IA ia=new MyClass();以ia可以调用方法是()

A. m1 ????B. m2 ????C. m3??????D. m4

7:Java中,以下关于继承的叙述正确的是(A)

A. 类只允许继承

B. 一个类只能实现一个接口

C. 一个类不能同时继承一个类和实现多个接口

D. 接口只允许单一继承。

8:仔细阅读以下代码,有几处错误代码?并修改正确。

System.out.println(ia.a);

9:仔细阅读以下代码,根据语法将代码补全。

abstract ??????public void m2(){}

10:仔细阅读以下代码,根据要求完成程序。

如果有一个类ClassE 实现ID 接口,如果不希望 ClassE 是抽象的,则需要实现哪些方法?

ma() ??mb() ??mc() ???md()

将以下代码补充完整:

IA ia=(IA)ic;

ia.ma();

IB ib=(IB)ic;

ib.mb();

ic.mc();

ID id=(ID)ic;

id.md();

写出以下程序输出的结果:

false

??????????????false

???true

???false

???true

11:仔细阅读以下代码,写出程序输出的结果。

true true true true

12:仔细阅读以下代码,写出程序运行输出结果。

Red Light shine in Red

Yellow Light shine in Yellow

Green Light shone in Green

13:仔细阅读以下代码,写出程序输出的结果。

TeacherA ??teach ??Java

TeacherB ??teach ??Java

14:仔细阅读以下代码:

需要一个实现ServiceInterface 接口的类MyService。

①第一种方式可以让 MyService 实现ServiceInterface 接口,即: class MyService implements ServiceInterface

②第二种方式可以让 MyService 继承AbstractService 类,即: class MyService extends AbstractService

请问:这两种方式有什么区别?AbstractService 类有什么作用?

class MyService ?implements ServiceInterface{

??????????public ?void doService1(){}

public void doService2(){}

public void doService3(){}

???????????} ?

???????????一种是实体类直接继承接口,需要实现接口中所有的方法,比较麻烦,且接口中可能会有实体类不需要的抽象方法,如果实体类实现接口,就必须实方法

?????????一种是缺省适配器模式由抽象类实现接口,抽象类中可以有抽象和非抽象方法,起到一个过滤子类不需要的方法的作用,把子类不需要的方法实例化,子类再继承抽象类就不需要 重写无用方法了

15:仔细阅读以下代码,完成//1、//2、//3、//4 处程序。

Animal []as={new Cat,new Dog,new Wolf};

int count=0;

for(int i=0;i<as.length;i++){

?if(as[i] instanceof Dog){

as[i].eat();

as[i].play();

count++;

}else if(as[i] instanceof ?Cat){

as[i].eat();

as[i].play();

count++

}else{

as[i].eat

count++

}

}

System.out.println(count);

16:编程:定义一个接口 MathTool,接口中有三个抽象方法如下:

“long fact(int?m);”方法的功能为:求参数的阶乘

“long intPower(int m , int n)”方法的功能为:求m 的n 次方

“boolean findFactor(int?m,int?n)”方法的功能为:判断参数的和是否大于 100

定义类实现接口,编写应用程序,调用接口中的 3 个方法,并将调用方法的结果输出。

17:编程:把继承练习题中形状改为接口?

package com.by.homework3.figure;

public interface Figure {
????public abstract void qiuzhouchang();
????public abstract void qiumianji();
}



package com.by.homework3.figure;

public class Circle implements Figure{
????int banjin;

????public Circle(int banjin) {
????????this.banjin = banjin;
????}

????@Override
????public void qiuzhouchang() {
????????Double zhouchang=2*3.14*banjin;
????????System.out.println("圆的周长:"+zhouchang);
????}

????@Override
????public void qiumianji() {
????????Double mianji=3.14*banjin*banjin;
????????System.out.println("圆的面积:"+mianji);
????}
}



package com.by.homework3.figure;

public class Square implements Figure{
????int bianchang;

????public Square(){

????}
????public Square(int bianchang) {
????????this.bianchang = bianchang;
????}

????public void qiuzhouchang(){
????????int zhouchang=bianchang*4;
????????System.out.println("正方形的周长:"+zhouchang);
????}
????public void qiumianji(){
????????int mianji=bianchang*bianchang;
????????System.out.println("正方形的面积:"+mianji);
????}
}

18:定义一个接口MediaPlayer,表示一个家庭影院的设备,MediaPlayer中包含play(),stop(),open(),三个方法分别表示播放、停止和开仓功能。

MediaPlayer有三个实现类,分别是:DVDPlayer,表示DVD播放器;CDPlayer,表示CD播放器; TapePlayer,表示收音机(播放磁带)。

创建一个遥控器Controller类。该遥控器有三个频道,可以分别控制三个设备。部分代码如下:

要求:

①完成MediaPlayer接口及其实现类代码。

package com.by.homework6.mediaPlayer;

interface MediaPlayer{
????void play();
????void open();
????void stop();

}


class DVDPlayer implements MediaPlayer{
????@Override
????public void play() {

????}

????@Override
????public void open() {

????}

????@Override
????public void stop() {

????}
}

class CdPLayer implements MediaPlayer{
????@Override
????public void play() {

????}

????@Override
????public void open() {

????}

????@Override
????public void stop() {

????}
}

class TapePlayer implements MediaPlayer{
????@Override
????public void play() {

????}

????@Override
????public void open() {

????}

????@Override
????public void stop() {

????}
}




class Controller{
????private MediaPlayer[] players;
????public Controller(){

????}

????public void play(int i){
????????players[i].play();
????}

}

public class MediaPlayerTest {
????public static void main(String[]args){

????}
}

②把Controller补充完整,完善其构造方法,并为其增加stop(int i)和open(int i)方法

19:定义一个Performer接口,表示一个演员,接口中定义perform方法,表示表演。为这个接口提供若干实现类:singer,表示歌手;Dancer,表示舞蹈演员;Player,表示演奏者。

定义一个Program类,表示一个节目。每一个节目需要多个演员配合,因此每一个Program类中都包含一个属性:Performer数组,表示表演这个节目所需要的演员。

给出Program的部分代码:

class Program{

private Performer[] ps;

public ?Program(){

ps=new Performer[3];

ps[0]=new Singer();

ps[1]=new Dancer();

ps[2]=new Player();

}

}

在现有代码的基础上,为Program增加一个show方法,在这个方法中,调用所有的表演这个节目的所有Performer的perform方法。

?Performer 接口:
public interface Performer {
????/**表演*/
????public abstract void perform();
}
Singer类:
public class Singer implements Performer {
????public void perform() {
????????System.out.println("歌手在表演");
????}
}
????Dancer 类:
public class Dancer implements Performer {
????public void perform() {
????????System.out.println("舞蹈演员在表演");
????}
}
Player类:
public class Player implements Performer {
????public void perform() {
????????System.out.println("演奏者在表演");
????}
}
????Program 类:
public class Program {
????private Performer[] ps;
????public Program(){
????????ps = new Performer[3];
????????ps[0] = new Singer();
????????ps[1] = new Dancer();
????????ps[2] = new Player();
????}
????public void show(){
????????for (int i = 0; i < ps.length; i++) {
????????????ps[i].perform();
????????}
????}
}
????PerformerTest 测试类:
public class PerformerTest {
????public static void main(String[] args) {
????????Program program = new Program();
????????program.show();
????}
}

20:定义一个学生类,属性为:姓名、年龄、成绩、头发数量

定义比较排序规则:

根据成绩从大到小排

如果成绩相同,根据头发数量从小到大排

如果头发数量也相同,根据年龄从小到大排

定义测试类,创建学生数组,合理创建若干学生对象,验证排序比较规则

提示:在compare方法中结合嵌套if分支

提交要求:把代码及运行截图放入word文档提交

?Student 类:
public class Student {
????private String name;
????private int age;
????private double score;
????private int hairNum;
????public Student() {
????}
????public Student(String name, int age, double score,int hairNum) {
????????this.name = name;
????????this.age = age;
????????this.score = score;
????????this.hairNum = hairNum;
????}
????public String getName() {
????????return name;
????}
????public void setName(String name) {
????????this.name = name;
????}
????public int getAge() {
????????return age;
????}
????public void setAge(int age) {
????????this.age = age;
????}
????public double getScore() {
????????return score;
????}
????public void setScore(double score) {
????????this.score = score;
????}
????public int getHairNum() {
????????return hairNum;
????}
????public void setHairNum(int hairNum) {
????????this.hairNum = hairNum;
????}
}
????StudentCompare 类:
public class StudentCompare implements Comparator<Student> {
????public int compare(Student o1, Student o2) {
????????if(o1.getScore() < o2.getScore()){
????????????return 1;
????????}else if(o1.getScore() > o2.getScore()){
????????????return -1;
????????}else {
????????????//如果成绩相等,头发少的在前
????????????if(o1.getHairNum() > o2.getHairNum()){
????????????????return 1;
????????????}else if(o1.getHairNum() < o2.getHairNum()){
????????????????return -1;
????????????}else{
????????????????if(o1.getAge() < o2.getScore()){
????????????????????return 1;
????????????????}else if(o1.getAge() > o2.getScore()){
????????????????????return -1;
????????????????}
????????????}
????????????return 0;
????????}
????}
}
????CompareTest 类:
public class CompareTest {
????public static void main(String[] args) {
????????Student[] students = {new Student("小白",23,100,123456),
????????????????new Student("小红",22,88,111111),
????????????????new Student("大红",23,88,111111),
????????????????new Student("小明",20,100,130000),
????????????????new Student("小美",21,90,130000)};
????????Arrays.sort(students, new StudentCompare());
????????//输出排序结果
????????for (int i = 0; i < students.length; i++) {
????????????System.out.println(students[i].getName()+" ?"+students[i].getAge() +" ?"
????????????????????+students[i].getScore() + " " + students[i].getHairNum());
????????}
????}
}

文章来源:https://blog.csdn.net/zhzjn/article/details/135231787
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。