46.接口数组
当一个抽象类,若是抽象类中的全部方法都是抽象的,那么咱们就能够把它定义为一个接口,接口是对行为的抽象。类是对属性和行为的抽象。this
语法对象
interface 接口名{继承
方法定的定义;接口
….开发
}get
(1)接口的特征:class
1.接口中的方法的定义不须要Abstract来修饰,默认就是抽象的扩展
2.不能够实例化的,须要有类来实现接口,实现接口的语法:jdk
class 类名 implements 接口名,接口名,…{
//实现每个接口中的方法
}
3.接口中的方法不能和private,static和final共存,
4.在接口中能够定义”属性”,能够经过接口的实现类的实例来访问(不推荐),推荐使用接口名.常量,这是一个常量默认是public, static ,final,属性不能修改
注意:常量的定义命名的规范要使用大写,单词之间要用“_”分隔。
5.接口能够继承接口,多级继承或者多继承,interface C extends A,B{},继承的接口中重复的方法会合并
interface May{
public static final double IP=3.14;
//Abstract来修饰,默认就是抽象的
public void marry();
}
interface April{
public void met();
}
//接口能够多继承接口
interface June extends May,April{
public void givebirth();
}
//类的实现能够实现多个
class Cal implements May,April{
int r;
public static void main(String[] args){
Cal c=new Cal();
c.r=5;
//调用接口中的方法能够用实现接口的类的实例对象来调用也能够用接口调用,推荐后者
System.out.println(5*5*c.IP);
}
//实现接口的类中要实现接口的每个方法
public void marry(){
}
public void met(){
}
}
(2)接口的应用
例子:正方形和圆的周长和面积
interface Sp{
double IP=3.14;
//抽象计算周长的方法
public double getLong();
//抽象计算面积的方法
public double getArea();
}
//定义一个Rect类实现Sp的方法
class Rect implements Sp{
int r;
public double getLong(){
return 4*r;
}
public double getArea(){
return r*r;
}
public Rect(int r){
this.r=r;
}
}
//定义一个Circle类实现Sp中的方法
class Circle{
int r;
public double getLong(){
return 2*r*Sp.IP;
}
public double getArea(){
return r*r*Sp.IP;
}
public Circle(int r){
this.r=r;
}
}
public class Calculate{
public static void main(String[] args){
Rect a=new Rect(4);
Circle b=new Circle(10);
System.out.println("正方形的周长是"+a.getLong()+"\t正方形的面积是"+a.getArea());
System.out.println("圆的周长是"+b.getLong()+"\t圆的面积是"+b.getArea());
}
}
注意:容易出现的问题忘记写主方法,调用方法忘记加括号,单词写错
(3)接口在JDK1.8中的特性
第一点:静态方法——接口在JDK1.8及以后的版本能够有静态方法
interface A{
//接口中定义一个静态方法,能够在其余类中直接调用这个方法语法:接口名.静态方法名(引用),可是这个方法必须是public static
public static void printArr(int[] arr){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
}
//建立一个类调用接口中的静态方法,这个类能够实现接口也能够不实现,能够是主类也能够不是主类
class Jdk1{
public static void main(String[] args){
//建立一个数组
int[] arr=new int[]{1,2,3,4,5,6};
//调用静态方法打印数组
A.printArr(arr);
}
}
第二点:默认方法——接口在JDK1.8及以后的版本定义默认方法(default)
接口中的默认方法能够在实现该接口的类中不写出来,默承认以实现调用,若是类中实现了,建立该类的对象优先调用类中实现的方法
interface A2{
//建立一个方法权限修饰符后面跟着default,注意default和static不能同时存在,这个方法是默认方法
public default void sleep(){
System.out.print("调用默认方法");
}
}
//建立一个类实现接口
public class Jdk2 implements A2{
public static void main(String[] args){
Jdk2 j=new Jdk2();
//调用在实现接口的类中默认实现的方法
j.sleep();
}
}
(4)实现接口的好处
1. 接口定义的是一种标准,能够使代码分层开发,分模块开发。
2. 下降代码的耦合度,提升代码的可扩展性和可维护性
3. 接口改进了单继承的局限。
(5)接口和抽象类的区别:
1.接口是行为的抽象能够有静态方法,抽象方法和默认方法,抽象类中能够有全部方法。
2.接口和抽象类都不能实例化,接口须要类来实现后实例化实现类,抽象类须要类来继承而后实例化子类。
3.抽象类只能单继承,接口能够多继承接口(jdk1.7),接口还能够多实现。
4.接口中的“属性”是public static final类型的,抽象类中的属性跟普通类中的属性没有区别。
5.接口中的方法默认就是抽象的不须要加absract,抽象类中的抽象方法须要加abstract关键字。