Java基础-18、接口

一、接口定义

接口与类相似,但只包含常量和抽象方法
接口中的所有数据域都是public static final,所有方法都是public abstract。所以Java允许简写,以下两种定义是等价的

public interface T
{
	public static final int K=1;//必须初始化,因为没有构造函数
	public abstract void p();
}
public interface T
{
	int K=1;//必须初始化,因为没有构造函数
	void p();
}

继承重写时别忘了加public,因为在接口中是public,子类中也必须是public。

二、接口的作用

对象继承接口,表明对象可以进行接口中定义的行为。因为不同的对象,从逻辑上来说八竿子打不着,更没有逻辑上的包含关系,所以它们不能继承自同一个基类(Object除外)。但它们有确实具有一些行为是相似的,比如鸡和苹果都可以吃,鸡属于动物,苹果属于水果(别跟我说它们都属于食物),引入接口可以提供这种多态:

函数参数为接口引用,传入八竿子打不着的对象的引用时,可以动态的执行它们重写的相同名字的接口。

接口扩大了多态的范围,多态有多重要接口就有多重要。

三、接口多态的示例

这个程序多态处传入Object对象,首先判断该对象是不是实现了接口的子类,是的话就调用接口函数

public class text{
    void eat(Object o)
    {
        if(o instanceof Chicken)
        {
            ((Chicken)o).howToEat();
        }
        else if (o instanceof Apple)
        {
            ((Apple)o).howToEat();
        }
        else
        {
            System.out.println("不能吃");
        }
    }
    public static void main(String[] args)
    {
        Object[] objects={new Chicken("大公鸡"),new Apple(10),
                new ArrayList<Integer>()};
        text t1=new text();
        for(int i=0;i<objects.length;i++)
        {
            t1.eat(objects[i]);
        }
    }
}
interface Eat
{
    void howToEat();
}
class Chicken implements Eat
{
    private String name;
    Chicken(String name)
    {
        this.name=name;
    }

    @Override
    public void howToEat() {
        System.out.println("煮着吃");
    }
}
class Apple implements Eat
{
    private int weight;
    Apple(int weight)
    {
        this.weight=weight;
    }

    @Override
    public void howToEat() {
        System.out.println("啃着吃");
    }
}

如果把eat(Object o)修改为eat(Eat o),我觉得更能体现接口和抽象类很相似。也更能体现多态的味道。

public class text{
    void eat(Eat o)
    {
        o.howToEat();
    }
    public static void main(String[] args)
    {
        Chicken c= new Chicken("大公鸡");
        Apple a=new Apple(10);
        text t1=new text();
        t1.eat(c);
        t1.eat(a);
        System.out.println();
    }
}

四、Java四大接口

1、Clonable 克隆对象
2、Comparable 比较对象
3、Serializable 序列化对象
4、Runable 对象线程化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值