/*
*作者:呆萌老师
*☑csdn认证讲师
*☑51cto高级讲师
*☑腾讯课堂认证讲师
*☑网易云课堂认证讲师
*☑华为开发者学堂认证讲师
*☑爱奇艺千人名师计划成员
*在这里给大家分享技术、知识和生活
*各种干货,记得关注哦!
*/
1、什么是接口
接口定义了实现类需要遵守的契约,从而在行为(方法)上约束我们的对象。
2、为什么要使用接口?
在Java中,由于没有多继承这个概念,主要是为了规避一个问题叫做菱形问题。在面向对象的编程思想中,有一个核心是面向接口编程的思想。在Java中有接口的这个概念,一来是为了解决没有多继承所带来的相关问题。二来是为了解耦。
项目开发中,我们通常会定义许多的对象,而这些对象的具体行为的实现是由我们对象当中方法来实现的。这个时候我们就会想到通过具体的方法我们可以控制对象的行为。但是又有一个问题了,我如何来控制一群具有相同行为的对行呢?有的人可能会说,我可以通过定义父类的方法继承他就可以控制了。但是又会有一个问题,因为我们Java是单继承的,那么我的子类这时候有需要继承其他类怎么办呢?
这时候就需要用到接口了。在接口当中我们可以通过定义的抽象方法体,让这些对象都遵守我们所定义的方法体。换句话说就是通过对象去实现我们定义的这些方法。从而促使这些对象都遵守这些约定。
在Java1.8之后有一个规定,凡是一个类实现了多个接口,那么这个类就实现了多继承。因为我们在实现这些接口的时候本质上是对接口当中的定义的抽象体/抽象方法的重写。
为什么可以解耦?主要是因为在接口中我们定义的都是抽象的方法体。
3、接口组成
一组公共的方法体
4、接口关键词:interface
5、实现关键词: implements
案例:分别计算平面和立体的长方、正方的周长和面积
6、接口特性
契约性:接口只负责提供契约(方法体),每个类负责契约的具体实现。
强制性:接口定义类的特征,所有实现类必须强制实现这些特征。也就是说必须实现所有的方法体。
抽象性:接口无法直接实例化。其中定义的方法也都是抽象的。
public interface T0 {//在项目开发中我们高级架构师一般会在开发初期来定义我们这些接口
public double c(double l,double w);//默认public
public double s(double l,double w);
public void select(int j,int n);
//正方体,长方体
public double cSolid(double l,double w,double h);
public double sSolid(double l,double w,double h);
public void selectSolid(int j,int n);
}
实现:
public class Ti implements T0 {//我们中级负责对这些方法的实现做设计/初级程序员负责完成这些方法的实现。
@Override
public double c(double l, double {
if(l==w)
return 4*l;
else
return 2*(l+w);
}
@Override
public double s(double l, double {
if(l==w)
return Math.pow(l,2);
else
return l*w;
}
@Override
public void select(int j,int {
Scanner scanner = new Scanner(System.in);
double l=0,w=0;
if(n>=3){System.out.println("数字不合法");return;}
switch (j){
case 1:
System.out.println("请输入长与宽");
l = scanner.nextDouble();
w = scanner.nextDouble();break;
case 2:
System.out.println("请输入边长");
l = scanner.nextDouble();
w=l;break;
default: System.out.println("数字不合法");return;
}
switch (n) {
case 1:
System.out.println(this.c(l, w));
break;
case 2:
System.out.println(this.s(l, w));
break;
default:
break;
}
}
@Override
public double cSolid(double l, double w, double {
if(l==w&&w==h)
return 12*l;
else
return 4*(l+w+h);
}
@Override
public double sSolid(double l, double w, double {
if(l==w&&w==h)
return Math.pow(l,3);
else
return l*w*h;
}
@Override
public void selectSolid(int j,int {
Scanner scanner = new Scanner(System.in);
double l=0,w=0,h=0;
if(n>=3){System.out.println("数字不合法");return;}
switch (j){
case 1:
System.out.println("请输入长宽高");
l = scanner.nextDouble();
w = scanner.nextDouble();
h = scanner.nextDouble();
break;
case 2:
System.out.println("请输入边长");
l = scanner.nextDouble();
w=l;h=l;break;
default: System.out.println("数字不合法");return;
}
switch (n) {
case 1:
System.out.println(this.cSolid(l, w, h));
break;
case 2:
System.out.println(this.sSolid(l, w, h));
break;
default:
break;
}
}
}
测试
import java.util.Scanner;public class Test {//测试工程师负责对实现的方法做测试
public static void main(String[] args) {
Ti t = new Ti();
while (true) {
System.out.println("请选择形状类型:1平面,2立体 0退出");
Scanner scanner = new Scanner(System.in);
int i0 = scanner.nextInt();
switch (i0) {
case 0:
System.exit(0);
break;
case 1:
System.out.println("请选择形状类型:1长方形,2正方形. 0退出");
int i = scanner.nextInt();
switch (i) {
case 0:
System.exit(0);
break;
case 1:
System.out.println("请选择计算目标: 1周长,2面积");
int j = scanner.nextInt();
t.select(i,j);//特例化
break;
case 2:
System.out.println("请选择计算目标: 1周长,2面积");
int j2 = scanner.nextInt();
t.select(i,j2);
break;
default:
System.out.println("数字不合法");
break;
}
break;
//正方体长方体
case 2:
System.out.println("请选择形状类型:1长方体,2正方体 0退出");
int i1 = scanner.nextInt();
switch (i1) {
case 0:
System.exit(0);
break;
case 1:
System.out.println("请选择计算目标: 1周长,2面积");
int j = scanner.nextInt();
t.selectSolid(i1,j);
break;
case 2:
System.out.println("请选择计算目标: 1周长,2面积");
int j2 = scanner.nextInt();
t.selectSolid(i1,j2);
break;
default:
System.out.println("数字不合法");
break;
}
break;
default:
System.out.println("数字不合法");
}
}
}
}
更多关注
https://edu.51cto.com/course/20203.html