java学习之路 之 高级类特性2-接口(interface)-练习题

// 接口通常用形容词来描述 , 用以描述一种能力.

public interface Flyer { // 接口 : 是对事物行为的抽象定义, 接口中只允许抽象方法,和全局常量

    public static final int num = 10;

    public void takeOff();

    public abstract void fly();

    public void land();
}

class Plane implements Flyer { // 具体类可以实现接口, 意味着要实现接口中的所有抽象方法

    @Override
    public void takeOff() {
        System.out.println("划行2小时");
    }

    @Override
    public void fly() {
        System.out.println("飞机飞行中...");
    }

    @Override
    public void land() {
        System.out.println("飞机着陆, 耳朵不舒服");
    }
}

abstract class Pet2 {

    // 可以包含属性, 构造器,普通方法, 抽象方法
    private String name;
    private int age;
    private double weight;

    public Pet2() {}

    public Pet2(String name, int age, double weight) {
        this.name = name;
        this.age = age;
        this.weight = weight;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public double getWeight() {
        return weight;
    }

    @Override
    public String toString() {
        return "名字:" + name + ",年龄:" + age + ",体重:" + weight;
    }

    // 抽象方法 : 只有方法签名没有方法体, 被abstract修饰
    public abstract void speak();

    public abstract void eat();
}

class Bird extends Pet2 implements Flyer { // 一个具体类同时继承父类并实现接口

    private int flySpeed;

    public Bird() {}

    public Bird(String name, int age, double weight, int flySpeed) {
        super(name, age, weight);
        this.flySpeed = flySpeed;
    }

    public void setFlySpeed(int flySpeed) {
        this.flySpeed = flySpeed;
    }

    public int getFlySpeed() {
        return flySpeed;
    }

    @Override
    public String toString() {
        return super.toString() + ",飞行速度:" + flySpeed;
    }

    @Override
    public void speak() {
        System.out.println("吱吱吱..");
    }

    @Override
    public void eat() {
        System.out.println("小鸟吃大虫");
    }

    @Override
    public void takeOff() {
        System.out.println("直接就飞,真痛快");
    }

    @Override
    public void fly() {
        System.out.println("想往哪儿飞");
    }

    @Override
    public void land() {
        System.out.println("电线杆就行");
    }

}


class FlyerTest3 {

    public static void main(String[] args) {
        Pet2 pet = new Bird("小飞", 2, 0.5, 30);
        pet.eat();
        //pet.fly(); 在Pet2类中并未定义fly()

        Flyer flyer = (Flyer)pet;
        flyer.fly();
    }
}

class FlyerTest2 {

    public static void main(String[] args) {
        Pet2 pet = new Bird("小飞", 2, 0.5, 30);
        /*
        pet.eat();
        pet.fly();
        pet.land();

        Flyer f = pet; // 多态 
        //f.eat();
        f.takeOff();
        */
    }
}

class FlyerTest {

    public static void main(String[] args) {
        //Flyer f = new Flyer();
        Flyer f = new Plane();
        System.out.println(f.toString()); // 不存在一个纯的接口对象.
        f.takeOff();
        f.fly();
        f.land();
    }
}


//定义一个接口用来实现两个对象的比较。
interface CompareObject{

    public int compareTo(Object o);   //若返回值是0, 代表相等;若为正数,代表当前对象大;负数代表当前对象小
 }
//定义一个Circle类。
class Circle {

    private double radius;

    public Circle() {}

    public Circle(double radius) {
        this.radius = radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getRadius() {
        return radius;
    }

    @Override
    public String toString() {
        return "半径:" + radius;
    }
}
/*
定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在ComparableCircle类
中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
*/
class ComparableCircle extends Circle implements CompareObject {

    public ComparableCircle() {}

    public ComparableCircle(double radius) {
        super(radius);
    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    public int compareTo(Object o) {
        return (int)(((Circle)o).getRadius() - getRadius());
    }
}

//定义一个Rectangle类。
class Rectangle {

    private double length;
    private double width;

    public Rectangle() {}

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getLength() {
        return length;
    }

    public void setWidth(double width) {
        this.width = width;
    }

    public double getWidth() {
        return width;
    }

    @Override
    public String toString() {
        return "矩形长:" + length + ",宽:" + width;
    }
}
/*
定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口。在ComparableCircle类
中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
*/
class ComparableRectangle extends Rectangle implements CompareObject {

    public ComparableRectangle() {}

    public ComparableRectangle(double length, double width) {
        super(length, width);
    }

    @Override
    public String toString() {
        return super.toString() + ",的矩形的面积";
    }

    @Override
    public int compareTo(Object o) {
        return (int)(((Rectangle)o).getLength() * ((Rectangle)o).getWidth() - getLength() * getWidth());
    }
}
/*
定义一个测试类TestInterface,创建两个ComparableCircle对象,调用compareTo方法比较两个类的半径大小。
*/
public class TestInterface {

    public static void main(String[] args) {
        CompareObject c1 = new ComparableCircle(5.0);
        CompareObject c2 = new ComparableCircle(6.5);
        int i = c1.compareTo(c2);
        if (i > 0) {
            System.out.println(c2 + " 大于 " + c1);
        } else if (i < 0){
            System.out.println(c2 + " 小于 " + c1);
        } else  {
            System.out.println(c2 + " 等于 " + c1);
        }

        CompareObject c3 = new ComparableRectangle(5.0,8.0);
        CompareObject c4 = new ComparableRectangle(5.5,4.0);
        int j = c3.compareTo(c4);
        if (j > 0) {
            System.out.println(c4 + " 大于 " + c3);
        } else if (j < 0){
            System.out.println(c4 + " 小于 " + c3);
        } else  {
            System.out.println(c4 + " 等于 " + c3);
        }
    }
}

public interface USB {

    public void connect();

    public void work();

    public void disconnect();

}

abstract class Device {

    private static int currentID = 1;

    private final int ID;
    private String name;

    {
        ID = currentID++;
    }

    public Device() {

    }

    public Device(String name) {
        this.name = name;
    }

    /*
    public void setID(int ID) {
        this.ID = ID;
    }*/

    public int getID() {
        return ID;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "ID:" + ID + ",设备名称:" + name;
    }

    public abstract void startup();

    public abstract void shutdown();

}

class Udisk extends Device implements USB {

    public Udisk() {}

    public Udisk(String name) {
        super(name); 
    }

    @Override
    public void startup() {
        System.out.println("U盘加电启动");
    }

    @Override
    public void shutdown() {
        System.out.println("U盘已经关闭, 可以拔出");
    }

    @Override
    public void connect() {
        System.out.println("U盘插入, 容量识别..");
    }

    @Override
    public void work() {
        System.out.println("U盘数据复制中....");
    }

    @Override
    public void disconnect() {
        System.out.println("U盘拔出..");
    }

}

class Camera implements USB {

    @Override
    public void connect() {
        System.out.println("摄象头插入, 调焦中...");
    }

    @Override
    public void work() {
        System.out.println("开录, 请微笑");
    }

    @Override
    public void disconnect() {
        System.out.println("录完了, 请拔出");
    }

}

class USBTest2 {

    public static void main(String[] args) {
        Device dev = new Udisk("金士顿64G");
        dev.startup();
        dev.shutdown();

        USB usb = (USB)dev;
        usb.connect();
        usb.work();
        usb.disconnect();

        System.out.println(usb);
    }
}

class USBTest {

    public static void main(String[] args) {
        USB usb1 = new Udisk();
        usb1.connect();
        usb1.work();
        usb1.disconnect();

        USB usb2 = new Camera();
        usb2.connect();
        usb2.work();
        usb2.disconnect();
    }

}
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值