Java基础10 接口的继承与抽象类
2015-08-17 16:54
405 查看
在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。
在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。interface接口同样可以继承,以拓展原interface。
我们在继承Cup的基础上,定义一个新的有刻度的杯子的接口,MetricCup
接口如下:
我们增添了一个新的方法原型WaterContent(),这个方法返回一个整数(水量)。
比如我们有下面一个Player接口:
我们新增一个MusicCup的接口。它既有Cup接口,又有Player接口,并增加一个display()方法原型。
(如何使用interface,见实施接口)
粮食 (可以是玉米、小麦、大米)
图形 (可以是三角形、圆形、正方形)
再比如,我们之前举出了例子:
人类 (可以是男人、女人)
在组织这样的关系时,我们可以使用继承,比如:
根据我们的常识:
"Food类的对象"的说法是抽象的。这样一个对象应该是属于Corn, Rice, Wheat子类中的一个。
Food类有eat()方法 (食物可以吃)。然而,这样的一个动作是抽象的。粮食的具体吃法是不同的。比如Corn需要剥皮吃,Wheat要磨成面粉吃。我们需要在每个类中覆盖Food类的eat()方法。
抽象与具体
Java中提供了抽象类(abstract class)的语法,用于说明类及其方法的抽象性。比如:
类中的方法可以声明为abstract,比如上面的eat()。这时,我们不需要具体定义方法,只需要提供该方法的原型。这与接口类似。当我们在比如Corn类中继承该类时,需要提供eat()方法的具体定义。
类中的另一个方法happyFood()并不是
当一个类中出现abstract方法时,这个类的声明必须加上abstract关键字,否则Java将报错。一个abstract类不能用于创建对象。
抽象类的定义中可以有数据成员。数据成员的继承与正常类的继承相同。
Java中抽象类和接口的简单区别
abstract method, abstract类
在继承中,我们为了提高程序的可复用性,引入的继承机制。当时的继承是基于类的。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类不能用于创建对象。
抽象类的继承
我们可以像继承类那样继承一个抽象类。我们必须用完整的方法定义,来覆盖抽象类中的抽象方法,否则,衍生类依然是一个抽象类。抽象类的定义中可以有数据成员。数据成员的继承与正常类的继承相同。
Java中抽象类和接口的简单区别
1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 2.实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 3.接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
总结
interface继承,多重继承abstract method, abstract类
相关文章推荐
- struts2 struts.xml文件<constant>标签说明
- java中的map其实就是以键值对形式的存放数据的容器,其常用的实现类主要是哈希map
- Eclipse 安装插件 几乎就这么几个步骤,包括svn安装
- Maven3路程(二)Eclipse集成Maven
- JAVA中有关byte,int,long这些基本数据类型的存储方式以及负数在JAVA中的表示方式
- java递归复制文件及文件夹
- java.lang.OutOfMemoryError: bitmap size exceeds VM budget
- java中Map操作汇总
- Java String 对象内存地址
- 用java页面下载图片
- eclipse屏蔽恶心的系统alt键
- [转载] Java并发编程:Lock
- spring报错
- java中利用jsch执行远程命令,实现sftp
- java中传中文直接Action处理不使用加密处理
- 华为上机题之输出身高差值最小的俩个人
- java多线程中关于原子操作
- JAVA随笔篇二(深入分析JAVA简单类型、String和对象的值传递和引用传递)
- Java中使用FTPClient解析文件
- Java 泛型