一、抽象和封装
类和对象体现了抽象和封装
抽象就是解释类与对象之间关系的词。类与对象之间的关系就是抽象的关系。一句话来说明:类是对象的抽象,而对象则是类得特例,即类的具体表现形式。
封装两个方面的含义:一是将有关数据和 *** 作代码封装在对象当中,形成一个基本单位,各个对象之间相对独立互不干扰。二是将对象中某些属性和 *** 作私有化,已达到数据和 *** 作信息隐蔽,有利于数据安全,防止无关人员修改。把一部分或全部属性和部分功能(函数)对外界屏蔽,就是从外界(类的大括号之外)看不到,不可知,这就是封装的意义。
二、继承
面向对象的继承是为了软件重用,简单理解就是代码复用,把重复使用的代码精简掉的一种手段。如何精简,当一个类中已经有了相应的属性和 *** 作的代码,而另一个类当中也需要写重复的代码,那么就用继承方法,把前面的类当成父类,后面的类当成子类,子类继承父类,理所当然。就用一个关键字extends就完成了代码的复用。
三、多态
没有继承就没有多态,继承是多态的前提。虽然继承自同一父类,但是相应的 *** 作却各不相同,这叫多态。由继承而产生的不同的派生类,其对象对同一消息会做出不同的响应。
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是否为空。
什么是抽象类和抽象方法?抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。抽象类有点类似“模板”的作用,目的是根据其格式来创建和修改新的类。对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象。当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract。 在抽象类中的成员方法可以包括一般方法和抽象方法。抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。抽象类本身不具备实际的功能,只能用于派生其子类。抽象类中可以包含构造方法,但是构造方法不能被声明为抽象。 抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类。 abstract不能与private、static、final、native并列修饰同一个方法。 程序举例:abstract class Animal 定义抽象类 abstract void eat()定义抽象方法}class Horse extends Animal 定义继承Animal的子类 void eat() 重写父类的抽象方法 }class Dog extends Animal void eat() }class test}运行结果: 马吃草料! 狗吃骨头!
什么叫JAVA的抽象方法?
抽象方法定义在抽象类或接口中,它只有方法的声明没有实现例如;
public abstract class AAA{
public abstract voi弧 test()
}
上面的test方法就是抽象方法,他后面直接写一个号不能带{}
抽象类和抽象方法起什么作用
实现多态啊..
最简单的一个作用,实现模板.
所有继承抽象类的子类,必须强制实现抽象类的抽象方法.如果没有抽象方法,则子类可有,可没有该方法.定义一个抽象方法后,所有子类就必须实现了.
另外,抽象类通常用于指向子类的实例场
比如:
抽象类 实例 = new 子类()
实例.抽象方法()
如果你不定义抽象方法,如何使用子类的方法呢??
Java中什么叫做抽象方法只需声明,而不需实现?
实现是针对其子类:例如
public abstract class Father{
只申明,不实现
public abstract void show()
}
public class Child extends Father{
实现
public void show{
System.out.println("show method!")
}
}
实现了方法,不觉得么?
你看父类的方法
public abstract void show()
只是做了声明,并没有方法体。
在其子类中:
public void show{
System.out.println("show method!")
}
实现了方法内部功能,我只是输出一句话,当然你可以做其他功能。
抽象方法和类是拿来干什么
(关键字abstract)抽象类是为继承而定义的,抽象类中不一定有抽象方法,但有抽象方法一定是抽象类。
抽象类中可以定义构造函数,但是不能使用关键字new 创建其对象。
如果某个类继承于抽象类,应将父类的抽象方法都覆盖,否则子类也是一个抽象类。覆盖实现则可以创建子类的对象。
静态方法和final方法都不能声明为抽象。
数据抽象方法的定义
数据类型是和数据结构密切相关的一个概念。它最早出现在高级程序设计语言中,用以刻划程序中 *** 作对象的特性。在用高级语言编写的程序中,每个变量、常量或表达式都有一个它所属的确定的数据类型。类型显式地或隐含地规定了在程序执行期间变量或表达式所有可能的取值范围,以及在这些值上允许进行的 *** 作。因此,数据类型(DataType)是一个值的 *** 和定义在这个值集上的一组 *** 作的总称。在高级程序设计语言中,数据类型可分为两类:一类是原子类型,另一类则是结构类型。原子类型的值是不可分解的。如C语言中整型、字符型、浮点型、双精度型等基本类型,分别用保留字int、char、float、double标识。而结构类型的值是由若干成分按某种结构组成的,因此是可分解的,并且它的成分可以是非结构的,也可以是结构的。例如,数组的值由若干分量组成,每个分量可以是整数,也可以是数组等。在某种意义上,数据结构可以看成是“一组具有相同结构的值”,而数据类型则可被看成是由一种数据结构和定义在其上的一组 *** 作所组成的。抽象数据类型抽象数据类型(AbstructDataType,简称ADT)是指一个数学模型以及定义在该模型上的一组 *** 作。抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。抽象数据类型和数据类型实质上是一个概念。例如,各种计算机都拥有的整数类型就是一个抽象数据类型,尽管它们在不同处理器上的实现方法可以不同,但由于其定义的数学特性相同,在用户看来都是相同的。因此,“抽象”的意义在于数据类型的数学抽象特性。但在另一方面,抽象数据类型的范畴更广,它不再局限于前述各处理器中已定义并实现的数据类型,还包括用户在设计软件系统时自己定义的数据类型。为了提高软件的重用性,在近代程序设计方法学中,要求在构成软件系统的每个相对独立的模块上,定义一组数据和施于这些数据上的一组 *** 作,并在模块的内部给出这些数据的表示及其 *** 作的细节,而在模块的外部使用的只是抽象的数据及抽象的 *** 作。这也就是面向对象的程序设计方法。抽象数据类型的定义可以由一种数据结构和定义在其上的一组 *** 作组成,而数据结构又包括数据元素及元素间的关系,因此抽象数据类型一般可以由元素、关系及 *** 作三种要素来定义。抽象数据类型的特征是使用与实现相分离,实行封装和信息隐蔽。就是说,在抽象数据类型设计时,把类型的定义与其实现分离开来。
Java父类中抽象方法有什么用?
楼主好好把继承和多态的概念理解下吧!
继承,是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于可以抽取多类事物的共性。
多态,把子类对象主观的看作是其父类型的对象,那么父类型就可以是很多种类型。
例如父类Person(人) 子类 Students(学生) 子类Teacher(教师)
珐类中有抽象方法 void work();子类分别实现
Person p1 = new Student()
Person p2 = new Teacher()
p1.work()
p2.work()
楼主自己试下什么结果!
如果你父类中不定义抽象方法或方法的话,你看看 还能够p1.work()这样调用吗?答案是否定的。
抽象类中的方法都必须是什么
1.抽象类与抽象方法的关系是:抽象方法必须在抽象类中,如果抽象方法不在抽象类中,则会编译报错,这个是规定的。
2.抽象类中的方法不一定要必须是抽象方法,可以有抽象方法,和非抽象方法。其中非抽象方法,往往都是抽象类的所有子类所具有的,而抽象方法则由具体的不同子类实现不同的方法
所以综上所述,这句话是错误的。
另外题外话。我是这么理解抽象类的。
水果就是一个抽象类。如果我叫你拿出一个水果的实例,对象出来,你肯定拿不出一个叫水果的实例,对象。你只是能拿出比如苹果,香蕉等水果的子类实例。
水果中的非抽象方法类似于苹果,香蕉都有皮,都有水(所以这些不用我们去实现)
抽象方法为:水果的形状(所以我们就要在苹果,香蕉中实现不同的形状方法)
纯手打~~忘采纳
java抽象类中没有抽象方法有什么用
就是单纯的不想让你创建这个类的实例,所以就把这个类给抽象起来。
Java怎么构建抽象类,抽象类的概念是什么?
普通类就是一个完善的功能类,可以直接产生对象并且可以使用,里面的方法都是带有方法体的,
而抽象类之中最大的特点是包含了抽象方法,而抽象方法是只声明而未实现(没有方法体)的方法,
而抽象方法定义的时候要使用abstract关键字完成,而抽象方法一定要在抽象类之中。
抽象类要使用abstract关键字声明。
范例:定义一个抽象类
abstract class A {
private String = "Hello World"
public void print() {
System.out.println()
}
public abstract void get() 只声明没有方法体
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)