java学习笔记(七)--(抽象类与接口下)(接口的定义与使用)

接口的定义与使用

  • 接口优先原则:在一个操作即可以使用抽象类又可以使用接口的时候,优先考虑使用接口。

  • 接口的定义(JDK8以前):接口就是抽象方法与全局常量的集合(纯粹版的抽象类),interfance关键字定义接口

interface IMessage{
    //全局常量
    public static final String MSG ="I am a biter";
    //抽象方法
    public abstract void print();
}

接口命名:接口使用 I 开头

子类要想使用接口,implements实现接口,一个子类可以同时实现多个父接口(避免单继承局限,实现多继承)

父接口的相互转换,前提两个父接口拥有必须共同实现子类

interface IMessage{
    //全局常量
    public static final String MSG ="I am a biter";
    //抽象方法
    public abstract void print();
}
interface INews{
    public abstract String getNews();
}
class MessageImpl implements IMessage,INews{
    public void print(){
        System.out.println(IMessage.MSG);
    }
    public String getNews(){
        return IMessage.MSG;
    }
}
public class Test{
    public static void main(String[] args){
        //子类向上转型,为父接口实例化对象
        IMessage m=new MessageImpl();
        //调用被子类覆写的方法
        m.print();
        //父接口相互转换
        INews n=(INews) m;
        System.out.println(n.getNews());
    }
}

父接口相互转化示意图:

子类的命名规范:接口名为 IMyInterfance,子类实现此接口命名为:MyInterfaceImpl

接口的使用限制:

  • 接口中只允许public权限(不顾是常量还是方法,都是public权限,即便不写权限修饰符也是public),在其余方法中默认为default权限。

interface IMessage{
    abstract void print();
}
class MessageImpl implements IMessage{
    //该方法默认为default权限,无法覆写父类
    void print(){
        System.out.println("Hello");
    }
}
public class Test{
    public static void main(String[] args){
        IMessage m=new MessageImpl();
    }
}

           阿里编码规约:接口中不要出现任何修饰符,public也不要加

  • 当子类既需要实现接口又需要继承抽象类时,请先使用extends集成一个抽象类,而后使用implements实现多个接口

  • 一个抽象类可以使用implements实现多个接口,接口不能继承抽象类

  • 接口可以使用extends继承多个父接口(接口多继承)

抽象类的应用:子类和基类为 is a 的关系

接口的应用场合

  • 定义操作标准(USB标准,停车场标准)

  • 表示能力

  • (了解)分布式开发中暴露远程方法

interface Car{
    public void inter();
    public void count();
    public void charge();
}
class truck implements Car{
    public void inter(){
        System.out.println("进入一个卡车!");
    }
    public void count(){
        System.out.println("开始计时!");
    }
    public void charge(){
        System.out.println("收费!");
    }
}
class Taxi implements Car{
    public void inter(){
        System.out.println("进入一个出租车!");
    }
    public void count(){
        System.out.println("开始计时!");
    }
    public void charge(){
        System.out.println("收费!");
    }
}
public class Test{
    public void Parking(Car car){
        car.inter();
        car.count();
        car.charge();
    }
    public static void main(String[] args){
        Test clint=new Test();
        clint.Parking(new truck());
        clint.Parking(new Taxi());;
    }
}

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/83342429
今日推荐