通常可以说四边形具有4条边,或者更具体点,平行四边形是具有对边平行且相等特性的特殊四边形,等腰三角形是其中两边相等的三角形,这些描述都是合乎情理的,但是对于图形对象却不能使用具体的语言进行描述,他有几条边,究竟是什么图像,没有人能说清楚,这种类在java中被定义为抽象类。

一:抽象类

在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。回想继承与多态的原理,继承树中越是在上边的类越抽象,如鸽子类继承鸟类,鸟类继承动物类等。在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在java中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图形,但他们的子类可以。

抽象类的语法:

public abstract class Test{

abstract void testAbstract();//定义抽象方法

}

其中,abstract是定义抽象类的关键字。

使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法;抽象方法没有方法体,这个方法本身没有任何意义,除非他被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。

反过来讲,如果声明一个抽象的方法,就必须将继承这个抽象方法的类定义为抽象类,不可能在非抽象类中获得抽象方法。换句话说,只要类中有一个抽象方法,此类就被标记为抽象类。

抽象类被继承后需要实现其中所有的抽象方法,也就是保证相同的方法名称,参数列表和相同返回值类型创建出非抽象方法,当然也可以是抽象方法。

继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖。这样在多态机制中,就可以将父类修改为抽象类,将方法修改成抽象方法,然后每个子类都重写这个方法类处理。但这又会出现我们刚探讨的多态是讨论的问题,程序中灰有太多冗余的代码,同时这样的父类局限性很大,也许某个不需要父类方法的子类也不得不重写方法。如果将方法放置在另外一个类中,这样让那些需要方法的类继承该类,而不需要方法的类继承图形类,但所有的子类都需要图形类,因为这些类是从图形类中被导出的,同时某些类还需要方法,但是在java中规定,类不能同时继承多个父类,面临这种问题,接口的概念就出现了。

二:接口

1.接口简介

接口是抽象类的延伸,可以将它看做是纯粹的抽象类,接口中的所有方法,都没有方法体。对于上面的问题,可以将方法封装到一个接口中,使需要方法的类实现这个接口,同时也继承图形类,这就是接口存在的必要性。

接口使用interface关键字进行定义,其语法如下:

public interface drawTest{

void draw();//接口内的方法,省略abstract关键字

}

*public :接口可以像类一样被权限修饰符修饰,但public关键字仅限用与接口在与其同名的文件中被定义。

*interface :定义接口关键字。

*drawTest:接口名称。

一个类实现一个接口可以使用implements关键字,代码如下:

public class S extends Y implements drawTest{

········

}

注意:在接口中定义的方法必须被定义为public或abstract形式,其他修饰符权限不被java编译器认可,即使不将该方法声明我public形式,他也是public。

说明:在接口中定义的任何字段都自动是static 和final的。

2、接口与继承

我们知道在java中不允许多重继承,但使用接口就可以实现多重继承,因为一个类可以同时实现多个接口,这样可以将所有需要继承的接口放置在implements关键字后并使用逗号隔开,但这可能会在一个类中产生庞大的代码量,因为继承一个接口时需要实现接口中所有的方法。

多重继承的语法如下:

class 类名 implements 接口1,接口2,接口3·····,接口n

在定义一个接口时可使该接口继承另外一个接口:

interface f1{

}

interface f2 extends f1{

}

转载于:https://blog.51cto.com/12170526/1868681

抽象类与接口 day-11.2相关推荐

  1. Java探索之旅(11)——抽象类与接口

    1.Java数据类型 ❶不可变类,是指当创建了这个类的实例后,就不允许修改它的属性值. 它包括: Primitive变量:boolean,byte, char, double ,float, inte ...

  2. Kotlin学习(11)→抽象类、接口、接口代理

    文章目录 1.抽象类 2.接口 3.接口代理 在期待着郭霖先生的<第一行代码(第三版)>时,意识到自己需要补充必要的Kotlin知识,现在通过写博客进行分享,争取拿到书之后早日上手. 使用 ...

  3. 稳稳当当学java之抽象类和接口(11)

    第十三章 抽象类和接口 1.作业回顾 1,编写一个Person类,包括属性(name.age),有参构造器.方法say(返回自我介绍的字符串). 2.编写一个Student类,继承Person类,增加 ...

  4. C#中抽象类和接口的区别

    一.抽象类:       抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆 ...

  5. [J2SE 基础知识]2、抽象类和接口(上)

    抽象类和接口<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一 ...

  6. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  7. Java抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

  8. 深入理解Java中的抽象类和接口

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

  9. C#抽象类与接口的区别【转】

    C#抽象类与接口的区别[转] 一.抽象类:      抽象类是特殊的类,只是不能被实例化(可以用派生类实例化基类对象):除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法(当然它可以有普通方法 ...

  10. C++中的抽象类以及接口的区别联系

    一.抽象类和接口 抽象类: 抽象类是特殊的类,不能被实例化(将定义了纯虚函数的类称为抽象类):除此以外,具有类的其他特性: 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法 ...

最新文章

  1. O/R Mapping 研究报告(转)
  2. C# 学习笔记(13)自己的串口助手
  3. PAT (Advanced Level) 1015 Reversible Primes(进制转换)
  4. Unable to parse the date: 2017-12-30 日期格式转化失败
  5. 案例:实现用户登录功能
  6. 有关objc中的单例
  7. zabbix通过ODBC监控sybase举例
  8. MongoDB学习(黑马教程)-3-数据库MongoDB的删除文档操作
  9. [SQL优化工具]Quest.Central.For.Databases——SQL Tuning for SQL Server
  10. 既往不恋,当下不杂,未来不迎
  11. 微粒社会,品牌如何进行营销?
  12. 代码练习——数组_实战
  13. 人机对战之取火柴游戏
  14. JSP网站开发之HTML入门知识及常用标记符 (一)
  15. 【大数据开发】SparkCore——自定义排序、实现序列化、自定义分区器
  16. ubuntu20.04开机黑屏解决方法
  17. linux nas目录老是掉,Linux运维:NAS存储故障案例
  18. 测试面试之Linux
  19. 【ZZ】电影的格式及版本
  20. CDR插件开发之CPG插件002 - CPG插件开发环境准备和搭建

热门文章

  1. java与jquery的选择器区别_java day44【JQuery 基础:概念,快速入门,JQuery对象和JS对象区别与转换,选择器,DOM操作,案例】...
  2. android.process.media+sd,android P系统WRITE_MEDIA_STORAGE添加读写SD卡权限
  3. cas 注销不关闭浏览器异常_如何关闭华为手机这些“流氓”推送?
  4. guns java_guns——一个简便的后台管理系统
  5. b类 蚂蚁金服_【面经】超硬核面经,已拿蚂蚁金服Offer!!
  6. php版本最低要求:5.4_Zabbix 5.0.0beta1版本初体验
  7. mysql系列问答题_(2)MySQL运维基础知识面试问答题
  8. 创建java ee_eclipse Java EE安装和web项目的创建
  9. linux定时调用程序参数说明
  10. 年薪50W+!懂这个的程序员就这么豪横!