博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个接口能否继承另一个接口?一个抽象类能否实现一个接口?
阅读量:4987 次
发布时间:2019-06-12

本文共 2308 字,大约阅读时间需要 7 分钟。

 
都可以;
 
 
一.一个接口能否继承另一个接口?
    接口继承接口  本质就是一个抽象类继承另一个抽象类(它们都没写方法的实例)。当一个类继承了一个抽象类,它必须要重写父类
抽象类中的抽象方法,如果不去重写父类抽象方法的实例,那么这个类也是抽象类(这个抽象子类,直到重写这个抽象方法的实例为止,
才能摆脱抽象的命运)。其实我们想想,一个类去实现一个接口也不就是一个实体子类把一个抽象的所以抽象方法实例化(重写了
抽象父类 中全部抽象方法),当然抽象类和接口还是有区别的。我上上篇就写到了抽象类和接口的区别,有兴趣的可以去看看。
  
说到这里 ,其实我们还可以再提问自己一个问题,抽象类能否继承接口呢?
 
    答案大家也知道了,可以吗。难道只能孔明能放火,还不让我们程序员“有点想法”了。
抽象类能否继承接口,我们可以给这个接口写实例,也可以不写留给子类(这个抽象类的子类)去重写。
 
.一个抽象类能否实现一个接口?
   这个问题我们可以这样去思考,要想实现接口,那么我们要在这个实现类(这个抽象类)里面写接口里面方法的实例。抽象类里面能存在方法的实例吗?
大家应该都看过抽象类的概念了,抽象类里面可以存在实例。这样我们就可以解释抽象类可以实现一个接口。
  当然我们也可以不在这个抽象类里面写实例,把他转嫁给这个抽象类的子类去写,这也是没有问题的。
 
 
 
下面我把抽象类和接口简介一下,希望能把上面一段话理解的更明白点,当然,如果有说的不对的地方希望各位大神指点一二,小弟还只是个菜鸟。
     声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况(但是不是不允许写)。不能创建
abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否
则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接
口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义
(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到
接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
 
下面给个例子,加深一下理解记忆。
public abstract class BasePhone implements Photo{    /**     * photo是一个接口,它有一个抽象的拍照的方法     * 我们手机有自身的呼叫和发消息的抽象行为,我们把呼叫和发消息看做手机这个事物整体的功能     * 我们设计抽象类的初衷是为了描述一个事物,接口是为了把事物之间各自拥有的行为放在一起 ,便于我们去调用这些行为     * 我们可以总结:     * 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象     * */    public abstract void call();//呼叫    public abstract void message();//发消息    @Override    public void photo() {        //这段重写可以不用写,我只是测试一下会不会报错    }}
public interface Net {    //接口中的变量会被隐式地指定为public static final变量    String NET_TYPE = "4G";    void net(String NET_TYPE);}
public interface Photo {    void photo();//拍照抽口}
public class Phone1 extends BasePhone implements Net {    @Override    public void call() {        System.out.println("有什么事,我们要联系呦");    }    @Override    public void message() {        System.out.println("给我发短消息,我必回");    }    @Override    public void photo() {        System.out.println("美图秀秀");    }    @Override    public void net(String NET_TYPE) {        System.out.println(NET_TYPE);    }}

测试类我就不写了,大家可以随便玩,如果大家想调用接口的常量,我们可以这样去写:

 

Net net= new Phone1(); String a=Net.NET_TYPE;//调用接口中的常量 net.net(a);

 

 
  

转载于:https://www.cnblogs.com/doubao520/p/5771171.html

你可能感兴趣的文章
关于ZedGraph几个难点
查看>>
Android Timer 的 schedule()方法定时循环切换图片
查看>>
poj1734 Sightseeing trip【最小环】
查看>>
非参贝叶斯(Bayesian Non-parameter)初步
查看>>
适度平衡树
查看>>
vmware12用 unlocker206能不能解锁 OS X系统
查看>>
修改表的定义
查看>>
CentOS 7 之Shell学习笔记
查看>>
hibernate 注解 联合主键映射
查看>>
si4438+efm32g210f128
查看>>
Oracle中的exist和in
查看>>
Declaration of should be compatible with that
查看>>
[python]新手写爬虫v2.5(使用代理的异步爬虫)
查看>>
《Java开发手册》学习进程之第8章继承
查看>>
Maximum Depth of Binary Tree
查看>>
一个Jquery上传文件插件
查看>>
测试用例评审
查看>>
工具-各种开源
查看>>
HTML5-盒子的使用
查看>>
Swift之单例模式
查看>>