(31)Java基础语法 --接口

目录

1、接口的概述

2、接口的定义格式

3、在接口中定义抽象方法

4、定义接口的 实现类

5、接口的使用

接口练习

6、接口的特点

7、一个实现类可以同时实现多个接口

8、接口的继承

9、设计提示


1、接口的概述

现实生活中的接口,比如USB接口为例:

       接口其实就是规定一些标准,要求各个生产厂商必须遵守这个标准。

好处:

       按照这个标准生产出来的设备都能在这个USB接口上使用,能让这些设备通用。

Java中的接口:

       是一个比抽象类还抽象的程序。

       它里面定义的方法一般都是抽象方法。

       在接口中定义的抽象方法其实就是接口定义的规范和标准。

       要求它的实现类都必须具有这些方法,如果它的实现类有这些方法了说明这些实现类是可以被使用的, 否则实现类是不能被使用的。

在JDK新版本中,也可以定义默认方法、私有方法、静态方法、变量

只能从一个类继承,但可以声明实现了多个接口,接口是多重继承的替代品。

2、接口的定义格式

权限修饰符 interface 接口名{

               定义抽象方法

        定义常量

        定义变量

        定义静态方法

        定义默认方法

        定义私有方法

}

public interface Animal {   // 接口

    public abstract void eat(); // 抽象方法(标准格式)
    
    abstract void sleep();  // 抽象方法
    
    public void method();   // 抽象方法

    public int id = 0; // 变量

    public static final double PI = 3.14;   // 常量

    public static void method01(){  // 静态方法

    }

    default void method02(){    // 默认方法

    }
}

 

3、在接口中定义抽象方法

格式:

        public abstract 返回值类型 方法名(形参列表);

简化格式:

       public abstract两个关键字可以都省略,也可以只写一个。

       如果这两个关键字没有写全,在编译阶段,编译器会自动补全。

       在大多数公司里面,都是只写public,不写abstract。

       在阿里和少数公司里面,这两个关键字都不写。

           void sleep(String where);

 

4、定义接口的 实现类

实现类就是一个普通的类,但是需要实现(重写)接口中所有的抽象方法。

在实现类中重写接口中的抽象方法,叫做实现接口中的抽象方法。

 

定义实现类 实现 接口:

        权限修饰符 class 类名 implements 接口名{

                实现接口中的抽象方法

                定义自己特有的属性和方法

        }

public interface Animal {   // 接口

    public abstract void eat(String food); // 抽象方法(标准格式)

    public abstract void sleep(String where);

}
public class Cat implements Animal {    // 实现类

    public void eat(String food){
        System.out.println("猫吃"+food);
    }

    public void sleep(String where){
        System.out.println("猫睡"+where);
    }
}

 

5、接口的使用

定义实现类的对象,然后通过对象调用实现的方法。

1.先创建实现类的实例对象:

       实现类名 对象名 = new 实现类名(实参列表);

2.通过对象调用实现的方法:

       对象名.方法名(实参列表);

接口练习

1、假设一个学校接待方面的程序,招待不同身份的人的食宿问题,其对应规则如下:

 

身份

宿

学生

食堂

宿舍

教师

教师食堂

学校公寓

学生家长

招待所

招待所

理论上,当然可以对每个不同身份的人各定义一个对应的类,并实现各自的方法,但是观察这些类,可以归纳出其有一个共同的模板,即“人”的“食、宿”问题。这时候,就可以发挥接口的功能了。

public interface Person {

    public abstract void eat();
    public abstract void sleep();

}
public class Student implements Person{

    @Override
    public void eat() {
        System.out.println("在食堂吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("在宿舍睡觉");
    }
}
public class Teacher implements Person {

    @Override
    public void eat() {
        System.out.println("在教师食堂吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("在学校公寓睡觉");
    }
}
public class Parent implements Person{

    @Override
    public void eat() {
        System.out.println("在招待所吃饭");
    }

    @Override
    public void sleep() {
        System.out.println("在招待所睡觉");
    }
}

2、需求说明:

         电视、风扇、冰箱等各种电器要想工作必须提供电源,使用接口模拟电器获得电源后进行工作。

         分析:

                         定义电源插座的接口(SocketInterface),具有供电的能力。getElectric()方法

                         定义类:电视类(TV)、风扇类(Fan)、冰箱类(Icebox),分别实现电源插座接口。

                         定义测试类,包含电器开始工作的方法,参数为电器对象(接口的引用指向实现类的对象,实现多态)

public interface SocketInterface {  // 电源插座接口

    public abstract void getElectric(); // 通电的方法
}
public class TV implements SocketInterface{

    @Override
    public void getElectric() {
        System.out.println("电视通电后开始工作");
        work();
    }

    public void work(){
        System.out.println("电视播放节目");
    }
}
public class Icebox implements SocketInterface {

    @Override
    public void getElectric() {
        System.out.println("冰箱通电后开始工作");
        work();
    }

    public void work(){
        System.out.println("冰箱工作");
    }
}
public class Fan implements SocketInterface {

    @Override
    public void getElectric() {
        System.out.println("风扇通电后开始工作");
        work();
    }

    public void work(){
        System.out.println("风扇工作");
    }
}
public class SocketInterfaceDemo {

    public static void main(String[] args) {

        TV tv = new TV();
        work(tv);

        Icebox ib = new Icebox();
        work(ib);

        Fan fan = new Fan();
        work(fan);

    }

    public static void work(SocketInterface sif){
        sif.getElectric();
    }
}

 

6、接口的特点

1.接口没有构造方法,不能创建对象。

2.接口只能被它的实现类使用,一个接口可以有多个实现类。

3.接口中可以定义抽象方法,静态方法,默认方法,私有方法,不能定义实例方法。

4.接口可以继承接口,而且可以多继承:

       java中的类只能单继承,不能多继承。

5.一个实现类可以实现多个接口。

 

在什么时候使用接口,什么时候使用抽象类?

        当从类中抽取出来的除了有抽象方法外,还有属性或者普通的方法时,需要使用抽象类。

        当从类中抽取出来的只有抽象方法时,需要使用接口。

 

7、一个实现类可以同时实现多个接口

java中允许一个实现类同时实现多个接口的目的,是为了提高实现类的扩展性。

格式:

        权限修饰符 class 类名 implements 接口1, 接口2, ...{

                    实现所有接口中的抽象方法

                    定义自己特有的属性和方法

        }

 

8、接口的继承

接口可以继承接口,而且可以多继承.

目的是为提高接口的扩展性.

格式:

        权限修饰符 interface 接口名 extends 父接口名1,父接口名2,...{

                  定义抽象方法

                       ...

        }

 

面向接口的开发:

        高内聚,低耦合

 

9、设计提示

1.能用接口的地方,不用类。(面向接口编程

2.一个模块尽量少知道其它模块的信息,知道的越少,对今后的维护越有利。

上一篇:(30)Java基础 --抽象类

下一篇:(32)java基础语法 --多态polymorphic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值