Java接口篇(一)

一、进行Java语言设计时,为什么要引入接口的概念?

解:编程语言的本质是对自然界事物的抽象,因此会提供抽象机制。而接口的本质其实是更高层次的抽象类(纯粹的抽象类),用于弥补抽象类在抽象程度上的不足。抽象类是对子类覆写方法的控制,但抽象类中同时会存在一些普通方法。而接口则用于解决这些普通方法的安全或隐私问题,对外部隐藏实现细节。

二、什么是接口?

解:

(1)接口的本质:纯粹的Java抽象类;

(2)接口的定义:通过关键字interface进行定义。通常接口名前加上大写字母I进行区分。

(3)接口不可以直接实例化对象,必须被子类实现,且一个子类可以实现多个父接口,但仅能继承一个父类

(4)子类若非抽象类,必须覆写接口中的全部抽象方法;


package com.java.test;
interface IChannel
{
    //接口中的abstract可以省略,但抽象类中的关键字abstract不可以省略
    String name="Channel4";//必须为全局常量
    String getName();//必须为抽象方法 
}
interface IMessage
{
    String Msg="0x888";
    String getMsg();
}
class ImplSignal implements IChannel,IMessage//一个子类可以实现多个父接口(有限的多继承,有效的解决了Java中的单继承问题)
{

    @Override//注解
    public String getMsg() {
        // TODO 自动生成的方法存根
        return "获取到的报文为:"+Msg;
    }

    @Override
    public String getName() {
        // TODO 自动生成的方法存根
        return "通道为:"+name;
    }
}
public class InterfaceDemo {
public static void main(String[] args)
{
    ImplSignal signalA=new ImplSignal();//接口无法实例化对象,必须通过子类实现
    System.out.println(signalA.getMsg());
    System.out.println(signalA.getName());
}
}
 


(5)接口对象可以通过子类对象的向上转型间接创建;

(6)子类的对象可以任意实现父接口的转换,且某一子类对象的父接口实例对象之间可以实现转换;

(7)接口不允许继承父类,因此接口不属于Object类的范畴(Object类可以接收所有的数据类型,包括:基本数据类型、数组、类对象等等);


public static void main(String[] args)
{
    ImplSignal signalA=new ImplSignal();//接口无法实例化对象,必须通过子类实现
    IMessage ImplMsg1=(IMessage)new ImplSignal();
    IChannel ImplChannel1=(IChannel)ImplMsg1;
    System.out.println(ImplMsg1.getMsg());
    System.out.println(ImplChannel1.getName());
}

 


(8)接口描述的是一个公共的定义标准,接口中所有抽象方法的访问权限默认皆为public、而非Default

(9)接口无法继承一个父类,但接口可以继承若干父接口,即:接口的多继承

 

(10)实现接口的可能为抽象类,且一个抽象类可以实现多个接口,一个普通类只能继承一个抽象类并实现多个父接口,且必须先继承后实现。


package com.java.test;
interface IChannel
{
    //接口中的abstract可以省略,但抽象类中的关键字abstract不可以省略
    String name="Channel4";//必须为全局常量,默认访问权限为:public
    String getName();//必须为抽象方法 
}
interface IMessage
{
    String Msg="0x888";
    String getMsg();
}
interface IMsg
{
    String IMsg="0x898";
    String getIMsg();
}
abstract class AbSignal implements IChannel,IMessage
{
    
    public abstract String getISignal();
}
class ImplSignal extends AbSignal implements IMsg//一个子类可以实现多个父接口(有限的多继承,有效的解决了Java中的单继承问题)
{

    @Override//注解
    public String getMsg() {//默认访问权限为:Default
        // TODO 自动生成的方法存根
        return "获取到的报文为:"+Msg;
    }

    @Override
    public String getName() {
        // TODO 自动生成的方法存根
        return "通道为:"+name;
    }

    @Override
    public String getISignal() {
        // TODO 自动生成的方法存根
        return null;
    }
     public String getIMsg() {
         return null;
     }
}
public class InterfaceDemo {
public static void main(String[] args)
{
    ImplSignal signalA=new ImplSignal();//接口无法实例化对象,必须通过子类实现
    IMessage ImplMsg1=(IMessage)new ImplSignal();
    IChannel ImplChannel1=(IChannel)ImplMsg1;
    System.out.println(ImplMsg1.getMsg());
    System.out.println(ImplChannel1.getName());
}
}
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值