Java1.8中的接口意义和接口的多态

目录

 

一、介绍

二、接口和多态


前言:

Java中的接口不是类,而是类的一组需求表述,这些类要遵从接口的统一格式进行定义.我们经常听到服务器厂商这么说:"如果类遵从某个特定的接口,那么就履行这项服务,下面给出一个具体的示例.Arrays类中的sort方法承诺可以对对象的数组进行排序,但要求满足下列前提:对象所属的类必须实现了Comparable接口.

另外,在接口中不能有非静态常量域的出现,对于域来说只能有 public static final int a = 10;这样的形式出现,就算你没有写权限和静态以及final关键字,编译器也会自动给你添加上去.

一、通过instanof判断是否实现了某接口

在继承中,我们学过可以通过instanceof关键字判断一个类是否是另一个类的派生类(子类),同样的,在接口中,同样可以使用instanceof判断一个类是否引用了一个接口.

package com.qcby;

/**
 * @Author: ssm
 * @Date: 2019/7/5 9:09
 */
public class TestMain {
    public static void main(String[] args) {
        TestInteface testInteface = new TestInteface();
        if(testInteface instanceof  Comparable){
            System.out.println("实现了Comparable接口");
        }else{
            System.out.println("没有实现Comparable接口");
        }
    }
}
class TestInteface implements Comparable{

    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

结果为实现了Comparable接口.

我们先来看怎么写一个接口:

public interface Human{
    void run();//每一个人类都会跑
    void yell();//每一个人类都会叫
}

 在java1.8之前,接口中只能声明方法,不能写方法的实例化.但是在Java1.8以后对接口加入了静态方法和默认方法的概念,在这些方法中可以写方法的实体:

public interface Human{    
    public static void cry(){
        System.out.println("人人都会哭泣");        
    }

    default void walk(){
        System.out.println("人人都会走路");
    }
}

对于静态方法来说,这有违我们设计一个接口的初衷;而对于默认方法,则显得没有必要,毕竟就算不默认,我们也可以在子类中重写这个方法.

那么接口的意义何在呢?莫急,接口可以看作规定了某些行为,比如说对于一个Person,一个Student,一个Worker,他们都是人类,都会run和yell,如果我对每一个人都单独的写两个方法未免显得过分繁琐,而且我也无法确定自己是否真的写了这两个方法,只有在调用的时候才能够知道.

但是通过接口我们可以确定这些类一定有run和yell方法,因为他们引用了Human接口,调用接口之后必须重写所有的方法才能够通过编译.

如果接口内有方法没有实现,那么一定会报告这样的一个错误.

一个类可以implements 多个接口,多个接口中间用","隔开.

二、接口和多态

在学习继承的时候我们知道,Java中有动态绑定的机制,对于一个指向子类的父类引用来说,调用这个引用的方法等于调用子类中的方法,同样的,接口也能够实现多态.

对于一个接口来说,他不能被new成一个对象,但是它却可以作为引用指向任意一个实现了它的类,示例如下:

    Human human = new Person();
    human.run();
    human = new Student();
    human.run();
    human.yell();

当然了,同继承相同,接口引用不能调用不属于接口的方法或者实例域.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值