Java笔记整理 —— 接口

接口

基本介绍

    接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来。

interface 接口名{
    //属性
    //方法(1.抽象方法 2.默认实现方法 3.静态方法)
}  
class 类名 implements 接口名{
    //自己的属性
    //自己的方法
    //必须实现的接口抽象方法
}

注:1. 在Jdk7.0 之前,接口里的所有方法都没有方法体,即都是抽象方法(abstract可省略)2. Jdk8.0 后,接口可以有静态方法,默认方法,也就是说接口中可以有方法的具体实现。

public interface Interface01 {
    public int n1 = 10;
    public void h1();   //接口中可省略abstract
    default public void say(){  //默认方法,要加上关键字default
        System.out.println("调用say方法");
    }
    public static void hi(){   //静态方法
        System.out.println("打招呼");
    }
}

注意事项

1. 接口不能被实例化。

Interface01 a = new Interface01(); //报错

2. 接口中所有的方法都是public方法,接口中抽象方法可以不用abstract修饰

void h1();  //实际上是 public abstract void h1();

如何验证:

public class Teacher implements Interface01{
    @Override
    void h1() {}   //报错,因为根据继承关系,重写方法时不能减小范围,间接证明为public  
}

3. 一个普通类实现接口,就必须将该接口的所有抽象方法实现,快捷键:点击要实现接口的名字,按 Alt + Enter ,点击 Implement methods,然后选中要实现的方法。

4. 抽象类实现接口,可以不用实现接口的抽象方法。

5. 一个类可以同时实现多个接口,中间用逗号隔开。

class Person implements IB,IC {}

6. 接口中的属性,前面默认有 public static final 修饰符,必须初始化

7. 接口中属性的访问形式:接口名.属性名

System.out.println(Interface01.n1);

8. 一个接口不能继承其他的类,但是可以继承多个别的接口。

public interface Interface01 extends Interface02,Interface03 {}

9. 接口的修饰符只能是 public 和 默认,这点和类的修饰符是一样的。

private interface Interface01{} //报错,修饰符只能是public或默认

10. 用对象名可以调用接口中的属性(另外也可以用类名和接口名调用),但是IDEA没有提示。

public class Test {
    public static void main(String[] args) {
        Teacher a = new Teacher();
        System.out.println(Teacher.n1);
        System.out.println(Interface01.n1);
        System.out.println(a.n1);  //没有报错,证明可以用对象名调用
    }
}

11. 有继承还有接口的类,如果接口和父类某个属性重名,调用时要用接口名和super指定。 

public class Teacher extends Person implements Interface01 {
    public void show(){
        System.out.println(Interface01.x);  //输出接口的x
        System.out.println(super.x);        //输出父类的x
        System.out.println(x);  //报错,无法确定哪个x  
    }
}

与继承的比较

    当子类继承了父类,就自动的拥有父类的功能(类似父子关系),如果子类需要扩展功能,就可以通过实现接口的方式扩展(类似师徒关系)比如说金丝猴继承猴子类,拥有了一些猴子的属性,如果金丝猴想要游泳和飞翔,那么就需要实现鱼和鸟的接口。可以理解为:实现接口是对Java单继承机制的一种补充。

    继承的价值主要在于:解决代码的复用性和可维护性。

    接口的价值主要在于:设计好各种方法,让其它类去实现这些方法。继承是满足 is - a 关系,而接口只需要满足 like - a 关系即可,接口比继承更加灵活。并且接口在一定程度上实现代码解耦。

接口的多态性

1. 多态参数

       Usb接口参数既可以接收手机对象,又可以接收电脑对象,接口引用可以指向实现了接口的类的对象。

public interface Usb {  //接口
    void work();
}

public class Phone implements Usb{
    @Override
    public void work() {
        System.out.println("Usb在手机上工作");
    }
}

public class Computer implements Usb
    @Override
    public void work() {
        System.out.println("Usb在电脑上工作");
    }
}
public class Test {
    public static void main(String[] args) {
        Test a = new Test();
        Phone b = new Phone();
        Computer c = new Computer();
        a.show(b);   //接口的多态,类似向上转型
        a.show(c);
    }
    public void show(Usb a){  //形参是一个接口
        a.work();
    }
}

 2. 多态数组

public class Test {
    public static void main(String[] args) {
        Usb[] usbs = new Usb[2];
        usbs[0] = new Phone();
        usbs[1] = new Computer();
        for (int i = 0; i < 2; i++) {
            usbs[i].work();   //调用接口中的方法
            if(usbs[i] instanceof Phone){
                ((Phone) usbs[i]).call();   //类似向下转型,call是Phone类的独特方法
            }
        }
    }
}

  由于能调用什么方法是根据编译类型来的,因此想调用call方法需要用到向下转型(类似)。

3. 多态传递现象

interface IA{
    void say();
}
 
interface IB extends IA{  //IB接口继承自IA
    void hi();
}

public class Person implements IB{
     IA a = new Person();   //这里就用到了多态传递现象
     @Override
     public void say() {

     }
     @Override
     public void hi() {

     }    //方法必须全部实现
}

    很明显,Person类并没有实现IA接口,但是却可以用IA来实例化对象。原因是Person实现了IB接口,而IB接口继承自IA,Person类把IB和IA接口的方法全部实现,相当于实现了IA。

    简而言之,类需要把implements接口的方法,以及接口父类的方法全部实现,然后可以用接口以及接口的子类实例化对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值