java随笔:浅谈抽象类与接口

一、介绍。

  接口和内部类为我们提供了一种讲接口与实现分离的更加结构化的方法。

  没有足够信息描述的类我们可以称它为抽象类。

二、问题引入。

  我们都知道门具有打开与关闭的功能,还有上锁等功能。门怎么打开与关闭是由设计师来决定的。这时我们可以设定一个抽象类。

1 abstract class door{
2     abstract void open();
3     abstract void close();
4 }

  假如此时我们给门加入报警的功能怎么办呢。当然我们不能在原有的door类中直接加入alarm的功能,因为并不是所有的门都具有报警这一项功能,所以我们不能这样建立一个抽象类。目前我们由两种解决方案。

  第一种:

1 abstract class door{
2     abstract void open();
3     abstract void close();
4 }
5 abstract class Alarm extends door{
6     abstract void alarm();
7 }

  通过定义一个抽象类来继承原有功能并且添加自己独特的功能。这种方法虽然也可以实现门的着三种功能,但是却增加了代码的复杂性,也不易于阅读,更不符合程序设计与面向对象的合理要求。

  第二种:

1 abstract class door{
2     abstract void open();
3     abstract void close();
4 }
5 interface Alarm {
6     void alarm();
7 }

  通过定义一个接口来描述报警这一功能,我们可以通过一个类来继承door这个功能,还能通过接口来实现报警这一个功能。正好符合程序设计的理念。

三、抽象类与接口的区别。

  学过java的基础都知道抽象类和接口都必须通过其他不包含抽象方法的类来实现其中的功能。那么它们有什么区别呢。

  抽象类的特点:

  1.抽象类不能实例化。可以通过继承的子类来实现实例化。

  2.只要包含一个抽象方法的类就必须定义为抽象类。

  3.抽象类可以包含具体的方法,当然也可以不包含任何的抽象方法。

  4.如果从一个抽象类继承,并且想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。

  接口的特点:

  1.Interface的方所有法访问权限自动被声明为public。

  2.接口中不存在实现的方法。

  3.实现接口的非抽象类必须要实现该接口的所有方法。

《Thanking in java》--interface这个关键字产生的是一个完全抽象的类,它根本就没有提供任何具体实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体的实现。一个接口表示:“所有实现了该特定接口的类看起来都像这样。interface只是它的外貌,但是现在我要声明它是如何工作的。”接口被用来建立类与类之间的协议。interface是一个极度抽象的类。想要创建一个接口,需要用interface关键字来替代class关键字。

区别:

  1.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。

  2.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。

  3.一个类只能继承一个抽象类,而一个类却可以实现多个接口。

  4.抽象类是对类的抽象(对事物进行抽象),接口是对行为的抽象(对方法进行抽象)。

四、总结

  1.一个类只能存在一个父类但是可以存在多个接口。

  2.在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据,而且它的所有方法都是抽象的。

  3.抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。

时间: 2024-10-14 17:55:12

java随笔:浅谈抽象类与接口的相关文章

浅谈抽象类和接口

1.接口类就是一个类的领导者,指明方向,非抽象型子类必须实现接口所指定的全部方法. 2.抽象类就是一个类的服务提供商,拥有众多服务,当需要的时候你来用就可以,如果你觉得抽象类提供的服务不满意,你还可以自己在子类重新来做. 3.接口类没有构造函数,抽象类有. 4.抽象类可以有数据成员,接口类不允许有. 5.接口的方法只能由public修饰.抽象类可以有public,private,protected来修饰. 6.一个类只能继承于一个抽象类,却可以继承于多个接口. 7.抽象类中可以有成员方法的实现代

java serialize 浅谈

对象的串行化(Serialization) 一.串行化的概念和目的 1.什么是串行化             对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(persistence).对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization) .串行化的主要任务是写出对象实例变量的数值.如果交量是另一对象的引用,则引用的对象也要串

java面向对象编程(八)--抽象类、接口

1.抽象类 1.1抽象类概念 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. //抽象类的必要性[Demo124.java] public class Demo124 { public static void main(String[] args) { //Animal an=new Animal();抽象类不允许实例化 Animal an=new Cat(); an.cry(); an=new Dog(); an.cr

Java语言中的----抽象类、接口

day12  Java语言中的抽象类与接口 一.抽象类和接口概述; 在昨天我们学习了Java的继承功能,这个是一个核心知识点,今天我们再继承的基础之上学习一下抽象类和接口这两个知识.什么是抽象类?如何定义一个抽象类?如何使用一个抽象类?这些都是我们需要掌握的. 同时我们还要知道如何来定义一个接口,在开发中定义接口来实现相关的功能是一个很重要的功能.如何来实现接口中的抽象方法,这些在这一节都会说到. 二.抽象类和接口 1.抽象类: 什么是抽象类?包含抽象方法的类就叫做抽象类 .使用abstract

Java基础5:抽象类和接口

Java基础5:抽象类和接口 1 抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder. 2 接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,如果你想实现一个具体map,这些方法就必须按照规定去实现. 3 另外,一个类可以实现多个接口,但是不能继承多个类. 然而接口却可以继承多个其他接口.这一点很神奇. 下面看一下具体的例子,有一些小细节平时可能不会注意. cl

java基础2:抽象类、接口与多态

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java多线程浅谈

经常看到,一个对象的synchronized方法被一个线程调用后,那么其他线程还能调用该线程的其他方法吗? 网上给出各种答案,其中一种是:不能. 但是,我们有没有自己动手去写一个简单的程序来验证一下?从这个问题浅谈一下我对java多线程的理解. 要理解java的多线程,首先的理解jvm. 参见http://blog.csdn.net/kyfg27_niujin/article/details/7942006

java提高篇(五)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

java普通类、抽象类、接口、面向对象理解

1.面向对象编程: 面向对象编程的语言不止java一种,还有: simula 67(第一个面向对象语言,支持单继承和一定含义的多态和部分动态绑定): Smalltalk(第一个支持动态类型的语言,支持单继承.多态和动态绑定): EIFFEL(支持多继承.多态和动态绑定): C++(它的大部分基于类的特性继承自Simula.支持多继承.多态和部分动态绑定): C#(也支持单继承,与Java和C++等有很多类似之处): Python( [?pa?θ?n]是一种解释型.面向对象.动态数据类型的高级程序