当前位置:  编程技术>java/j2ee

Java基础教程之接口的继承与抽象类

    来源: 互联网  发布时间:2014-11-07

    本文导语:  在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。 在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。interface接口同样可以继...

在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。

在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。interface接口同样可以继承,以拓展原interface。

接口继承

接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型。比如,我们以Cup作为原interface:

代码如下:

interface Cup {
    void addWater(int w);
    void drinkWater(int w);
}

我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup

接口如下:

代码如下:

interface MetricCup extends Cup
{
    int WaterContent();
}

我们增添了一个新的方法原型WaterContent(),这个方法返回一个整数(水量)。

interface的多重继承

在Java类的继承中,一个衍生类只能有一个基类。也就是说,一个类不能同时继承多于一个的类。在Java中,interface可以同时继承多于一个interface,这叫做多重继承(multiple inheritance)。

比如我们有下面一个Player接口:

代码如下:

interface Player
{
    void play();
}

我们新增一个MusicCup的接口。它既有Cup接口,又有Player接口,并增加一个display()方法原型。

代码如下:

interface MusicCup extends Cup, Player
{
    void display();
}

(如何使用interface,见实施接口)

抽象类

在生活中,我们会有一些很抽象的概念。这些抽象的概念往往是许多类的集合,比如:

1.粮食 (可以是玉米、小麦、大米)
2.图形 (可以是三角形、圆形、正方形)

再比如,我们之前举出了例子:

1.人类 (可以是男人、女人)

在组织这样的关系时,我们可以使用继承,比如:

根据我们的常识:

1."Food类的对象"的说法是抽象的。这样一个对象应该是属于Corn, Rice, Wheat子类中的一个。

2.Food类有eat()方法 (食物可以吃)。然而,这样的一个动作是抽象的。粮食的具体吃法是不同的。比如Corn需要剥皮吃,Wheat要磨成面粉吃。我们需要在每个类中覆盖Food类的eat()方法。

抽象与具体

Java中提供了抽象类(abstract class)的语法,用于说明类及其方法的抽象性。比如:

代码如下:

abstract class Food {
    public abstract void eat();
    public void happyFood();
    {
        System.out.println("Good! Eat Me!");
    }
}

类中的方法可以声明为abstract,比如上面的eat()。这时,我们不需要具体定义方法,只需要提供该方法的原型。这与接口类似。当我们在比如Corn类中继承该类时,需要提供eat()方法的具体定义。

类中的另一个方法happyFood()并不是

当一个类中出现abstract方法时,这个类的声明必须加上abstract关键字,否则Java将报错。一个abstract类不能用于创建对象。

抽象类的继承

我们可以像继承类那样继承一个抽象类。我们必须用完整的方法定义,来覆盖抽象类中的抽象方法,否则,衍生类依然是一个抽象类。

抽象类的定义中可以有数据成员。数据成员的继承与正常类的继承相同。

总结

interface继承,多重继承

abstract method, abstract类


    
 
 

您可能感兴趣的文章:

  • java没有多继承,用接口来实现多继承的功能,但哪里体现了多继承啊?我对接口的概念一直弄不清楚,请大家帮忙!
  • java继承的问题
  • xx.java继承yy.class,编译xx.java为xx.class时应怎样书写?(谢谢)
  • 关于java的访问控制和继承,这段话怎么理解?
  • 求java.io包中的类的继承关系!
  • 请教大家!!!java如何实现多重继承?接口该如何使用?份数可以再加,只要我明白了
  • 一个JAVA继承的问题(Thinking in JAVA里的一个例子)
  • java继承中的构造方法实例解析
  • java里有没有象vc里的sleep(1000)一样的功能的东西 当然不是实现Runnable不是继承线程类
  • 有关Java构造函数的问题之三——继承性
  • 有两个:1.class与2.java,2.java继承1.class类,要把2.java编译成2.class给如何书写!
  • 在JAVA中如何用接口实现C++的多重继承呀?帮帮忙!
  • 提一个java继承方面的问题
  • java中 IO 常用IO操作类继承结构分析
  • 那位大虾知道javaScript的window对象是从java的什么类里继承来的?可否实现如下功能
  • 《thinking in java》一个有关继承的程序不明白,请讲一讲,谢谢
  • JAVA中阻止类的继承(官方和非官方)
  • JAVA 继承基本类、抽象类、接口介绍
  • java教程之java继承示例详解
  • 基于java中子类的继承性的应用介绍
  • java命名空间javax.script接口invocable的类成员方法: getinterface定义及介绍
  • java的API中有没有既实现了Map接口又实现了List接口的类?
  • java命名空间javax.lang.model.element接口typeelement的类成员方法: getinterfaces定义及介绍
  • ImageMagick的Java 接口 im4java
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getmanagementspecversion定义及介绍
  • 【请教】java中接口问题
  • java命名空间java.beans.beancontext接口beancontextproxy的类成员方法: getbeancontextproxy定义及介绍
  • 我刚学java,想请教一下,我在文本中创建了一个接口,一个类,还有一个扩展类,保存为.java文件时,如何给文件名?
  • java命名空间javax.print接口uriexception的类成员方法: getreason定义及介绍
  • 在java中接口与抽象类在使用中有多大的区别
  • java命名空间javax.swing.text接口caret的类成员方法: install定义及介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问大侠学java要有c语言基础吗?
  • 请问,要有哪些java基础才能开始学习EJB???谢谢!!!(急!!!)
  • 假设现在对且仅对java基础比较熟悉(通过scjp),要做一个java proxy的软件,步聚是什么?
  • 请问哪里有 《JAVA核心技术--基础知识》的电子书下载,谢谢!
  • java 基础学者
  • 一道考验基础的JAVA语法题
  • 学JAVA之前要不要先学一些基础的东西?
  • 学习Java的流程是怎样的?我有了java和oop的基础,能否开始学EJB(J2EE)???
  • 请大家谈一下JAVA的学习经验,如何能打下扎实的基础?
  • java 2 基础类,哪里有完整的说明?
  • 有c++基础,学习java需要多长时间?
  • 多帮忙,初学JAVA的人,该用什么书呢?(没有C基础的)
  •  只有一点JAVA语言基础,但是想先看看关于软件工程方面的东西.可能吗?
  • java基础问题,小妹先谢谢了
  • 请推荐一本英文版的JAVA基础教程
  • 有C++基础,要上手JAVA,需要多长时间?
  • 一道基础英语填空题(Java)
  • java基础问题:如何构造类
  • java 基础:两个类之间的联系问题
  • java 基础:JTable
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3