java之接口interface

概述

一方面,有时必须从几个类中派生出一个子类,继承他们的所有属性和方法。但是java中不支持多继承。引出接,接口可以实现多继承的效果

另一方面,有时必须从几个类中抽取出一些共同特征,而他们之间又没有is-a的关系,只具有相同的行为特征。例:摄像头、充电器、MP3 机、手机、数码相机都支持USB连接

接口就是规范,定义的是一组规则。继承体现的是一个"是不是"的关系,而接口则实现是"能不能"的关系。

接口的本质是标准,规范,指定好后大家都要遵守。

接口的特征

1.接口使用interface来定义
 2.java中接口和类是并列的两个结构
 3.如何定义接口:定义接口中的成员
      3.1JDK7及以前:只能定义全局常量和抽象方法
           全局常量:public static final的(可省)
           抽象方法:public abstract的
       3.2 JDK8:除了定义全局常量和抽象方法外,还可以定义静态方法,默认方法
 4.接口中不能定义构造器
 5.java开发中,接口通过让类去实现(implements)的方式来使用
     如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
     如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类    
 6.java类可以实现多接口
     格式:class A extends B implements C,D,E //继承父类并且实现接口
 7.接口和接口之间可以继承,而且可以多继承
 8.接口的具体使用,体现了多态性
 9.接口,实际上可以看作是一种规范

为什么接口中只能定义常量?

如果接口定义的是变量的话,比如接口中我定义了变量a,而且我们通过实现本接口的类B的对象改变了a的值,那么其他实现本接口的类B、类C中的变量a得知都要随着改变(因为它们实现的都是一个接口,处理的也是同一个变量,而变量的处理方式为传址),那么就会造成想要实现本接口的类却不知道接口里现在变量a到底是什么值,就会造成混乱。

 代码实现

public class InterfaceTest {
    public static void main(String[] args) {
        System.out.println(Flyable.MAX_SPEED);
        System.out.println(Flyable.MIN_SPEED);
        
        Plane plane = new Plane();
        plane.fly();
    }
}

//攻击性接口
interface Attackable{
    
    void attrack();
}


//飞行接口
interface Flyable{
    
    //全局常量
    public static final int MAX_SPEED = 7900; //第一宇宙速度
    int MIN_SPEED = 1;   //省略了
    
    //抽象方法
    public abstract void fly();
    //省略了
    void stop();
}

//飞机类覆盖了接口中的所有抽象方法,则此飞机类就可以实例化
class Plane implements Flyable{
    @Override
    public void fly() {
        System.out.println("飞机起飞");
    }
    @Override
    public void stop() {
        System.out.println("飞机减速停止");
    }
}

//风筝类实现接口,没有覆盖接口中所有的抽象方法,它仍是一个抽象类
abstract class Kite implements Flyable{
    @Override
    public void fly() {
        
    }
}

//子弹类实现攻击接口和飞行接口
class Bullet extends Object implements Flyable,Attackable{

    @Override
    public void attrack() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        
    }
    
}

//************************************************************
//接口多继承
interface A{
    void method1();
}

interface B{
    void method2();
}

interface C extends A,B{
    
}

接口的好处:

1.降低耦合度

2.提高程序的可扩展性

接口和抽象类的异同(面试题)

1.接口的方法默认是 public,所有方法都是抽象方法,在接口中不能有方法的实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法

2.接口中的实例变量默认是 final 类型的,而抽象类中则不一定

3.一个类可以实现多个接口,但最多只能继承一个抽象类

4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定

5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,

抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值