接口的学习

本文详细介绍了Java接口的概念、特点及使用,包括接口作为完全抽象的引用数据类型、接口与类的关系、接口的实现与多态。通过具体代码示例展示了如何使用接口实现不同厨师烹饪行为的抽象,以及一个类可以实现多个接口的能力。此外,还探讨了接口间的多继承和类对多个接口的实现,强调了接口在降低耦合度和提高扩展性方面的重要性。
摘要由CSDN通过智能技术生成

接口
1、接口也是一种“引用数据类型,编译之后也是一个单独的字节码文件。目的也是为了降低程序耦合度,提升程序扩展力,面向抽象编程。
2、接口是完全抽象的(对比是抽象类是半抽象的),接口是特殊的抽象类。
3、接口提取的通常是动作行为,对行为的抽象。使用的比抽象类多。
4、接口只能包含两部分的内容:常量和抽象方法。
5、接口中所有元素都是Public修饰的,所以抽象方法语法可以简化为“返回值类型 方法名();",常量语法由“public static final 数据类型 数据名”简化为“数据类型 数据名”。
6、类和类之间继承extends,接口和类之间实现implement,但依然可以把实现看做继承。
7、抽象类和非抽象类都可以实现接口,但非抽象类实现(重写/覆盖)接口时要实现所有抽象方法。由于接口内方法都是公共的,且鉴于“重写之后的方法访问权限不能更低”,实现的方法要写出定义public。
8、接口也能实现多态,由于接口是完全抽象的,且目标是面向抽象编程,所以也可称之为面向接口编程。

public class test {
    public static void main(String[] args) {
        Menu cook = new ChineseCook();//创建厨师对象,父类型引用指向子类型对象,接口的多态化。
        Customer customer = new Customer(cook);//创建顾客对象,将cook传进去。
        customer.orderPlate();

    }
}

class Customer{
    //ChineseCook a这样写就直接写死了
    private Menu menu;//记得封装

    public Customer() {
    }
    public Customer(Menu menu) {
        this.menu = menu;
    }

    public Menu getMenu() {
        return menu;
    }
    public void setMenu(Menu menu) {
        this.menu = menu;
    }

    public void orderPlate(){
        Menu m = this.getMenu();
        m.beaf();
        m.pork();
    }
}

interface Menu{
    void beaf();
    void pork();
}

class ChineseCook implements Menu{
    public void beaf(){
        System.out.println("ChineseCook is working on beaf");
    }
    public void pork(){
        System.out.println("ChineseCook is working on pork");
    }
}

class WesternCook implements Menu{
    public void beaf(){
        System.out.println("WesternCook is working on beaf");
    }
    public void pork(){
        System.out.println("WesternCook is working on pork");
    }
}


9、接口和接口之间能实现多继承。
10、一个类能实现多个接口。弥补了Java中只能单继承的缺陷。

public class test {
    public static void main(String[] args) {
        vehicle a = new car();//父类型引用指向子类型对象。
        a.move();
    }
}

    interface vehicle {
        void move();//接口的方法名前缀一定是public abstract,并且可以省略。
    }

    interface laws{
    int limitSpeed = 90;
    }

    class car implements vehicle,laws{//实现多个接口
        public void move() {
            System.out.println("moving under "+limitSpeed+"km/h");
        }
    }

11、接口和接口进行强制类型转换的时候,不要求一定要有继承关系,可以过编译关,但运行可能异常ClassCastException。此时还是老样子,用instanceof运算符进行判断。
12、继承和实现可以同时实现,extends关键词在前,implement关键词在后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值