// 接口通常用形容词来描述 , 用以描述一种能力.
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();
}
}
java学习之路 之 高级类特性2-接口(interface)-练习题
最新推荐文章于 2024-01-31 20:57:42 发布