Java基础10 接口的继承与抽象类

链接地址:http://www.cnblogs.com/vamei/archive/2013/03/31/2982240.html

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

实施接口中,我们利用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,见实施接口)

抽象类

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

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

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

  • 人类 (可以是男人、女人)

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

根据我们的常识:

  • "Food类的对象"的说法是抽象的。这样一个对象应该是属于Corn, Rice, Wheat子类中的一个。
  • 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快速教程”系列文章

时间: 2024-12-09 12:20:21

Java基础10 接口的继承与抽象类的相关文章

Java基础10 接口的继承与抽象类(转载)

接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,增添新增的接口方法原型.比如,我们以Cup作为原interface: interface Cup{    void addWater(int w);    void drinkWater(int w);} 我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup 接口如下: interface MetricCup extends Cup{    int WaterContent

java Vamei快速教程10 接口的继承和抽象类

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的继承是基于类的.interface接口同样可以继承,以拓展原interface. 接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的interface为基础,

Java基础十--接口

Java基础十--接口 一.接口的定义和实例 1 /* 2 abstract class AbsDemo 3 { 4 abstract void show1(); 5 abstract void show2(); 6 } 7 8 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 9 另一种形式定义和表示,就是 接口 interface. 10 */ 11 12 //定义接口使用的关键字不是class,是interface. 13 //interface编译后还是.class文件,其实本质

java基础之泛型的继承

关于泛型的基本介绍和理解请参考以下几篇文章,或查询更多资料: 泛?型?与?泛?型?继?承 泛型(包括泛型抽象类的继承) 泛型的继承测试 本篇以简单的List<>方式来进行说明. ArrayList<Object>继承了List<Object>, ArrayList<String>没有继承List<Object> List<?>等价于List<? extends Object> 请参考以下代码: /** * author D

Java基础10:全面解读Java异常

Java基础10:全面解读Java异常 为什么要使用异常 首先我们可以明确一点就是异常的处理机制可以确保我们程序的健壮性,提高系统可用率.虽然我们不是特别喜欢看到它,但是我们不能不承认它的地位,作用. 在没有异常机制的时候我们是这样处理的:通过函数的返回值来判断是否发生了异常(这个返回值通常是已经约定好了的),调用该函数的程序负责检查并且分析返回值.虽然可以解决异常问题,但是这样做存在几个缺陷: 1. 容易混淆.如果约定返回值为-11111时表示出现异常,那么当程序最后的计算结果真的为-1111

Java基础(8) - 接口、抽象类

存在的意义接口 - 接口对维护和解耦代码有很很好的帮助 同时由于接口常用来约束对象的行为,可实现"多继承".抽象类 - 抽象类对于代码的维护和重用有很好的帮助. 参考:接口 - https://blog.csdn.net/googleoyyp/article/details/78912259抽象类 - https://blog.csdn.net/chenchaozzu/article/details/82785068 接口和抽象类的区别1.抽象类只能继承且只能继承一个,接口只能实现,但

java基础(11):接口、多态

1. 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义与实现分离,优化了程序设计. 请记住:一切事物均有功能,即一切事物均有接口. 1.2 接口的定义 与定义类的class不同,接口定义时需要使用interface关键字. 定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件.这

Java基础学习之(6)--继承+访问权限

一.继承的相关概念: B继承A可以描述为:B是一种A,B是一种A的继承关系,B从A继承. 子类自动拥有基类(父类)的所有成员(包括成员变量和成员方法). java只支持单继承,c++支持多继承,但是Java有多种语义存在.  child类中n_private=10是错的,因为子类拥有父类私有变量的访问权,但是没有使用权:即私有变量,只在父类对象中可以访问!!!  二.访问控制: 对象成员的权限有private,default,protected,public. 类的权限只有public,defa

Java基础之接口(四)

接口:interface,是抽象方法和常量值的定义的集合. 本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法的定义,而没有变量和方法的实现.常量不需要final修饰,方法不需要abstract修饰. 多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口. 接口中声明属性默认为public static final的,也只能是public static final,不需要显示修饰. 接口中只能定义抽象方法,默认为public,也只能是public,不需要显示修饰. 接口可