抽象类和抽象方法


抽象方法
在面向对象编程语言中抽象方法指一些只有方法声明而没有具体方法体的方法抽象方法一般存在于抽象类或接口中。
java中,抽象方法就是以 abstract 修饰的方法,只需要声明而不需要实现
abstract void f();

抽象类

包含抽象方法的类叫抽象类。

abstract class Sample {

    private int param1;

    abstract void f1();

    void f2() {}

}
注:

1、如果一个类包含有抽象方法,则必须限定为抽象类,否则编译器会报错。

2、抽象类不能实例化,否则编译器会报错。

接口

什么是接口

java中,接口是以 interface 来修饰的。

接口可以被视为一个比“抽象类”更加抽象的类。

实现接口

一个类遵循某个特定或一组接口,必须使用 implements 关键字。

interface Fly {

    void fly();

}

class Bird implements Fly {

    @Override

    public void fly() {

        System.out.println("展翅飞翔");

    }    

}

注:接口中的方法必须是 public 类型,可以不显示地指定。但是如果指定为其他类型,编译器会报错。

扩展接口

玩过游戏的朋友们,肯定熟悉这个模式。

一名战士需要具备战斗能力。一名骑士不仅需要具备战斗能力,也需要具备骑术。

更进阶的圣骑士则还需要具备法师一般的魔法能力。这个关系可以抽象成以下代码:

interface Warrior {

    void fight();

}

interface Knight extends Warrior {

    void riding();

}

interface Enchanter {

    void magic();

}

// Paladin类实现多个接口,需要包含这些接口的所有方法

class Paladin implements Knight, Enchanter {

    public void fight() {}

    public void riding() {}

    public void magic() {}

}

多重继承

请考虑如下图的情况,一名在职研究生既是职工,也是学生,也是研究生。如果我们要在代码中实现这个继承关系,该如何去做?

C++中支持多重继承,但是JAVA中不支持多重继承,以下方式是错误的。一个类不能扩展多个类。

class Person {};

class Student extends Person {};

class Postgraduate extends Student {};

class Employee extends Person {};

class OnJobPostgraduate extends Postgraduate, Employee {};

JAVA中虽然不支持多重继承,但是可以通过接口实现类似的行为。一个类可以实现多个接口。

interface Person {};

interface Student extends Person {};

interface Postgraduate extends Student {};

interface Employee extends Person {};

class OnJobPostgraduate implements Postgraduate, Employee {};

[Java 基础]接口的更多相关文章

  1. Java 基础 接口和多态

    接口 接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的 ...

  2. Java基础接口和抽象类区别(二)

    抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则 ...

  3. java基础-接口

    浏览以下内容前,请点击并阅读 声明 接口是java语言中的一个引用类型,和类一样,接口可以包含常量,方法签名,默认方法,静态方法和嵌套类型.含有方法主体的只有其中的默认方法和静态方法.接口不能被实例化 ...

  4. Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

    36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...

  5. java基础接口练习

    1.编写2个接口:InterfaceA和InterfaceB:在接口InterfaceA中有个方法voidprintCapitalLetter():在接口InterfaceB中有个方法void pri ...

  6. Java基础--接口和抽象类的区别

    任何不谈使用方法的空理论都是耍流氓 使用场景 · 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也可以这么做了) · 如果你想实现多重继承,那么你必须使用接口 ...

  7. java基础—接口概念

    一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如“金丝猴是一种动物”,金丝猴从动物这个类继承,同时“金丝猴是一种值钱的东西”,金丝猴从“值钱的东西”这个类继承,同时“金丝猴 ...

  8. java基础——接口与抽象类的区别

    (1)首先接口和抽象类的设计目的就是不一样的.接口是对动作的抽象,而抽象类是对根源的抽象. (2)对于抽象类,一个类只能继承一个抽象类.但是一个类可以同时实现多个接口. (3)接口是公开的,里面不能有 ...

  9. Java基础——接口

    一:接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数. 在封装与接口中,private关键字封装了对象的内部成员.经过封装,产品隐藏了内部细节,只提供给用户接口(int ...

随机推荐

  1. C++混合编程之idlcpp教程Python篇(9)

    上一篇在这 C++混合编程之idlcpp教程Python篇(8) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相比,工程PythonTutorial7中除了四个文件PythonTu ...

  2. 初试TinyIoCContainer笔记

    第一次看到TinyIoCContainer是在用NancyFx的时候,在Bootstrapper那里看到了她的影子. 那些叫Tiny的东西都挺有意思,IoC容器是我第一次遇到,于是找了些文章看了看,自 ...

  3. svn patch用法

    最近遇到了一个patch的使用场景: 有一个同事对源码做了一些修改,但是又不想将源码提交到SVN服务器,而我又想得到他所做的修改. patch的使用方法: 创建patch 在要导出“修改”的目录中,单 ...

  4. js for 循环中的 变量问题。

    今日处理项目中的一个循环,本来就是一个小小的for循环,后来发现该段程序出现了问题,仔细检查代码没有发现其中的错误.无奈只好叫来了老大帮忙.通过在模版中断点调试(该方式只能自己写debugger断点) ...

  5. (转载)编写高效的jQuery代码

    原文地址:http://www.cnblogs.com/ppforever/p/4084232.html 最近写了很多的js,虽然效果都实现了,但是总感觉自己写的js在性能上还能有很大的提升.本文我计 ...

  6. java提高篇(二二)---LinkedList

    一.概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得L ...

  7. 简述Python模块和包

    我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...

  8. 哪些JavaScript IDE最好用?

    阅读本文之前,分享大家一张图片,看图会发现JavaScript开发需求最高,占比达到42.84%,因此掌握JavaScript语言好工作就不愁啦,工欲善其事必先利其器,那么选择IDE来开发是至关重要的 ...

  9. C#高级一

    1.单例模式:又叫单件模式,属于创建型模式分类.实际上讲,一个对象只允许创建一个实例,并且提供了一个全局的访问点.  (静态方法生命周期长,消亡时间短,GC不回收) ================= ...

  10. C/C++ char* arr与char arr[]的区别(反汇编解析)

    写作日期:2016.08.31 修改日期:2016.09.01 .2016.09.02. 交流qq:992591601 用了几天时间复习了下C语言.对于C语言的字符串操作有些不习惯,于是作为练习,写下 ...