您的位置:

java中的抽象类,java中的抽象类和接口的区别

本文目录一览:

java中抽象类的存在的意义是什么?

java中抽象类更利于代码的维护和重用。

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下:

1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。

比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。

2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。

比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。

所以,Java中抽象类对于代码的维护和重用有很好的帮助,也是Java面向对象的一个重要体现。

java编程抽象类技术如何实现?

java编程一直以来都是互联网上使用比较广泛的一种编程语言,所以我们今天就一起来了解一下java编程中的抽象类是如何来实现的,希望通过对本文的阅读,大家能够对java编程技术有更深刻的认识,下面昆明电脑培训就开始今天的主要内容吧。

AbstractMap抽象类实现了一些简单且通用的方法,本身并不难。但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范。

抽象类通常作为一种骨架实现,为各自子类实现公共的方法。上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究。

Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实现了Map接口部分方法,也就是说为它的子类各种Map提供了公共的方法,没有实现的方法各种Map可能有所不同。

抽象类不能通过new关键字直接创建抽象类的实例,但它可以有构造方法。AbstractMap提供了一个protected修饰的无参构造方法,意味着只有它的子类才能访问(当然它本身就是一个抽象类,其他类也不能直接对其实例化),也就是说只有它的子类才能调用这个无参的构造方法。

在Map接口中其内部定义了一个Entry接口,这个接口是Map映射的内部实现用于维护一个key-value键值对,key-value存储在这个Map.Entry中。AbstractMap对这个内部接口进行了实现,一共有两个:一个是可变的SimpleEntry和一个是不可变的SimpleImmutableEntry。

publicstaticclassSimpleEntryimplementsEntry,java.io.Serializable

实现了Map.Entry接口,并且实现了Serializable(可被序列化)。

它的方法比较简单都是取值存值的操作,对于key值的定义是一个final修饰意味着是一个不可变的引用。另外其setValue方法稍微特殊,存入value值返回的并不是存入的值,而是返回的以前的旧值。需要重点学习的是它重写的equals和hashCode方法。

publicstaticclassSimpleImmutableEntryimplementsEntry,java.io.SerializableSimpleImmutableEntry

定义为不可变的Entry,其实是事实不可变,因为它不提供setValue方法,在多个线程同时访问时自然不能通过setValue方法进行修改。它相比于SimpleEntry其key和value成员变量都被定义为了final类型。调用setValue方法将会抛出UnsupportedOperationException异常。

它的equals和hashCode方法和SimpleEntry一致。

接下来查看AbstractMap抽象类实现了哪些Map接口中的方法。

publicintsize()

Map中定义了一个entrySet方法,返回的是Map.Entry的Set集合,直接调用Set集合的size方法即是Map的大小。

publicbooleanisEmpty()

调用上面的size方法,等于0即为空。

publicbooleancontainsKey(Objectkey)

这个方法的实现较为简单,通过调用entrySet方法获取Set集合的迭代器遍历Map.Entry,与参数key比较。Map可以存储为null的key值,由于key=null在Map中存储比较特殊(不能计算hashCode值),所以在这里也做了判断参数key是否为空。

Java中抽象类和抽象方法的区别

1.抽象方法:在类中没有方法体的方法,就是抽象方法。

2.抽象类:含有抽象方法的类就叫抽象类。

3.抽象类中的抽象方法必须被实现!

4.如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象类!

5.抽象类中的普通方法,可以不必实现。

6.用abstract来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。

7.抽象类不能被实例化。

8.抽象方法只需声明,而不需实现某些功能含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

Java抽象类是什么概念?

JAVA的抽象类其实和她的普通类在表示实现概念的东西没多大区别,不要因她带有抽象这个形容词就觉得比她的普通类理解起来复杂.

个人的理解是

所谓的抽象类呢,就是带有抽象方法的类.

所谓的抽象方法就像是一种写代码的规范.

抽象方法没有方法体

抽象方法可以有参数列表

抽象方法用abstract修饰

抽象方法的访问修饰分别为 public、protected、default(缺省 不用写)

加深了解抽象类

/*理解JAVA抽象类

* 1.抽象类不能被实例化.

* 2.抽象类有构造器,且他的构造在他的子类被实例化时被调用的顺序和普通类调用的顺序是一样的(先父后子).

* 3.抽象类内部的方法可以不是抽象方法,也就是说抽象类内部可以有具体的方法.

* 4.抽象类的抽象方法属于一种不完整的方法,只含有声明和定义,没有方法主体.

* 5.如果抽象的某个子类是普通类(非abstract类型的类),那么该子类必须Override抽象类中所有的抽象方法.

* 6.抽象类的子类也是抽象类的话,那么该子类既可以Override父类中的方法,也可以不Override父类中的方法.

* 7.普通类中不能定义抽象方法.

* 8.static不能修饰抽象方法

* 备注:为了方便理解,所谓的普通是指如下形式定义的类

* public class X{} 或 class A XX{}

* */

java抽象类

抽象类是指不允许被实例化的类;抽象方法是没有方法体的方法。

1、抽象类可以不包括抽象方法,它反正不会去实例化,里面的方法是不是抽象的没有本质影响。

2、但是含有抽象方法的类绝不能被实例化,否则执行这个方法的时候,怎么办?

3、如果子类是非抽象的,那么它就必须实现父类中的抽象方法;否则,它继承来的抽象方法仍然没有方法体,也是个抽象方法,此时就与“含有抽象方法的类必须是抽象类”相矛盾了。

比如说,我在纸上画一个饼(抽象类),饼有个“吃到嘴里沾一嘴芝麻”的方法。我可以在饼上画几个点假装是芝麻,这时候“沾芝麻方法”就是个抽象方法,因为它不会真的掉芝麻;我也可以在饼上蘸点儿真芝麻,这时候“沾芝麻方法”就是个有实现的方法。但是用哪个方法都可以,因为没人会去真的吃画的饼吧。

但我要真的去照着这个图烤一个饼(非抽象子类),那这个子类的“吃到嘴里沾一嘴芝麻”的方法就必须有具体的实现。否则烤出来,一吃,没芝麻啊!食客非上消协投诉不可。

java中的抽象类与接口有什么异同?

相同点:

(1)都不能被实例化

(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点:

(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可以有定义与实现,方法可在抽象类中实现。

(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

(3)接口强调特定功能的实现,而抽象类强调所属关系。

(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

(5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时用接口。