Java接口和抽象类

2016-03-02 - 1,398 Views - 0 Goods - Nothing

一、抽象类

什么是抽象类:

如果一个类包含了抽象方法,则称之为抽象类。但是并不是所有的抽象类都包含抽象方法,在日常使用中,如果定义了一个抽象类而不包含抽象方法,那么定义这个抽象类将显得毫无意义。

抽象类的特征:

抽象类必须用关键词abstract修饰。其访问控制类型一般为[public],[protect],缺省为[public]。因为定义抽象类的目的就是为了使其被继承,如果为[private],则无法被继承。
相较于普通类,抽象类还有以下特点

  1. 抽象类无法实例化对象
  2. 如果子类继承了抽象类,则其需要实现抽象类的抽象方法,否则子类也必须为抽象类

PS:Java中的类只能单继承,这与C++有些区别

以下是定义一个抽象类的例子


public abstract class ClassName{ abstract void volume(); }

二、接口

这里有一个很形象的例子来说明到底接口是何方神圣

来自知乎用户@Ivony,,,,
“接口就是个招牌。比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。那么为神马我们要去定义一个接口涅,这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。”

接口中可以含有变量和方法(一般情况下不在接口中定义变量)。接口中的变量会被隐式地指定为public static final变量,并且只能是public static final变量,而方法会被隐式地指定为public abstract方法且只能是public abstract方法,并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。


public interface InterfaceName { abstract void volume(); }

与抽象类不同的是,一个类可以有多个接口的实现


class ClassName implements Interface1, Interface2, ….{ //定义类并且实现接口 }

参考资料:http://www.cnblogs.com/dolphin0520/p/3811437.html

转载请注明原文链接:首页 -> 学习记录 -> Java学习记录 -> Java接口和抽象类

FuZhou . FuJian

"Never start something you're not willing to finish"