接口
生活中有很多接口,例如: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("请输入正确的打印机编号");
}
}
}
测试类代码冗余较大,主要就是从控制台输入来计算图形面积