java练习题之接口interface练习

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());
        }
    }
}

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值