接口和实现类

2023-05-16

接口
生活中有很多接口,例如:USB接口、电源接口、Type-c接口等等;一个接口,对应一个接口相应的设备。
程序中的接口:一种标准,一种规范,一系列抽象方法的集合。

接口的特点

1、接口不能实例化
2、接口中的方法都是抽象方法(public abstract 系统自带的,不需要写),但是 jdk1.8之后,还提供了默认方法:default(这个在实现类中重不重写都可以)
在这里插入图片描述
3、接口中的属性默认添加 public static final; 常量
即,所有常量名大写 例:int NUM;和public static final int NUM一致。
4、子类实现接口必须实现接口中的所有的抽象方法。
5、子类可以实现多个接口,即多实现
6、接口可以继承接口

栗子

USB 接口

public interface USB {
    //抽象方法
    public abstract void speak();
    //默认方法
    public default void listen() {
        System.out.println();
    }
    //抽象方法
    void read();
    void write();
}

Transfer 接口

public interface Transfer {
    void tran();
}

实现类

public class Upan implements USB,Transfer {

    @Override
    public void read() {
        System.out.println("U盘正在读取数据");
    }

    @Override
    public void write() {
        System.out.println("U盘正在写入数据");
    }

    @Override
    public void tran() {
        System.out.println("U盘正在传输数据");
    }
//listen()是默认方法,可以重写,也可以不重写
    @Override
    public void listen() {
        
    }
}

电脑类

public class Computer {
    //操作USB接口中读的方法
    void readUpan(USB usb){
        System.out.println("正在读取U盘");
        usb.read();
    }
    //操作USB接口中写的方法
    void writeUpan(USB usb){
        System.out.println("正在写入U盘");
        usb.write();
    }
    //操作Transfer接口中的方法
    void tranUpan(Transfer transfer){
        System.out.println("正在传输U盘");
        transfer.tran();
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        //创建电脑类对象
        Computer computer=new Computer();
        USB usb=new Upan();
        Transfer transfer=new Upan();
        computer.readUpan(usb);
        computer.writeUpan(usb);
        computer.tranUpan(transfer);
    }

}

在这里插入图片描述

练习
在这里插入图片描述
分析
1、创建一个图形形状的父类,在定义一个计算面积的抽象方法,然后定义一个圆形类和矩形类分别去继承这个形状类,并重写其中的抽象方法
2、创建一个打印接口,定义一个打印形状的方法,定义黑白打印机和彩色打印机分别去实现打印这个接口。
要求:通过选择一个打印机,用来打印面积

方法一(属性值写死)

//定义图形抽象类
public abstract class Statue {
    abstract void area(int a, int b, int r, double Π);
}
//矩形类继承图形类
class Chang extends Statue {
    @Override
    void area(int a, int b, int r, double Π) {
        System.out.println("矩形面积为:" + a * b);
    }
}
//圆形类继承图形类
class Yuan extends Statue {
    @Override
    void area(int a, int b, int r, double Π) {
        System.out.println("圆形面积为:" + r * r * Π);
    }
}

打印接口

public interface Printer {
    void show(Statue statue);
}

黑白打印机

public class HB implements Printer {

    @Override
    public void show(Statue statue) {
        System.out.println("这是一台黑白打印机");
        //给area()方法里面传入参数
        statue.area(5,5,5,3.14);
    }
}

彩色打印机

public class CS implements Printer {

    @Override
    public void show(Statue statue) {
        System.out.println("这是一台彩色打印机");
        statue.area(3,3,3,3.14);
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        //创建黑白打印机对象
        HB hb=new HB();
        //创建矩形对象
        Statue chang=new Chang();
        //创建圆形对象
        Statue yuan=new Yuan();
        //通过控制台输入来操作
        Scanner str=new Scanner(System.in);
        System.out.println("请问要打印矩形(1)还是圆形(2)?");
        int num=str.nextInt();
        if (num==1){
            hb.show(chang);
        }else if (num==2){
            hb.show(yuan);

        }else {
            System.out.println("请输入正确的数字");
            System.exit(0);
        }
    }
}

在这里插入图片描述
在这里插入图片描述
方法2(从控制台输入矩形的长、宽和圆的半径)

//定义图形抽象类和抽象方法
public abstract class Statue {
    protected abstract void cacl();
}
//继承抽象类
class Chang extends Statue{
    //重写抽象方法cacl()
    @Override
    protected void cacl() {
        System.out.println("下面开始计算矩形面积");
        //从控制台输入数据
        Scanner str=new Scanner(System.in);
        System.out.println("请输入矩形的长");
        int a=str.nextInt();
        System.out.println("请输入矩形的宽");
        int b=str.nextInt();
        int s=a*b;
        System.out.println("矩形面积为:"+s);
    }
}
//继承抽象类
class Yuan extends Statue{
    //重写抽象方法cacl()
    @Override
    protected void cacl() {
        System.out.println("下面开始计算圆形面积");
        Scanner str=new Scanner(System.in);
        System.out.println("请输入圆的半径");
        double r=str.nextInt();
        double Π=3.14;
        double s=Π*r*r;
        System.out.println("圆的面积为:"+s);
    }
}

打印接口

public interface Print {
    void printer(Statue statue);
}

黑白打印机实现类

public class HbPrinter implements Print {
    @Override
    public void printer(Statue statue) {
        System.out.println("这是一台黑白打印机");
        statue.cacl();
    }
}

彩色打印机实现类

public class CsPrinter implements Print {
    @Override
    public void printer(Statue statue) {
        System.out.println("这是一台彩色打印机");
        statue.cacl();
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        //创建主人类对象
        HbPrinter hb=new HbPrinter();
        CsPrinter cs=new CsPrinter();
        //创建图形对象
        Statue statue1=new Chang();
        Statue statue2=new Yuan();
        Scanner str=new Scanner(System.in);
        System.out.println("请输入你想使用的打印机 黑白打印机1/彩色打印机2");
        int nums=str.nextInt();
        if (nums==1){
            System.out.println("你选择的是黑白打印机");
            System.out.println("请输入你打印的图形 矩形1/圆形2");
            int num=str.nextInt();
            if (num==1) {
                hb.printer(statue1);
            }else if (num==2){
                hb.printer(statue2);
            }else {
                System.out.println("请输入正确的数字");
                System.exit(0);
            }
        }else if (nums==2){
            System.out.println("你选择的时彩色打印机");
            System.out.println("请输入你打印的图形 矩形1/圆形2");
            int num=str.nextInt();
            if (num==1) {
                hb.printer(statue1);
            }else if (num==2){
                hb.printer(statue2);
            }else {
                System.out.println("请输入正确的数字");
                System.exit(0);
            }
        }else {
            throw new RuntimeException("请输入正确的打印机编号");

        }

    }
}

测试类代码冗余较大,主要就是从控制台输入来计算图形面积

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口和实现类 的相关文章

随机推荐