黑马程序员技术交流社区
标题:
Java中的继承、封装、多态、抽象
[打印本页]
作者:
pi408637535
时间:
2015-7-14 17:14
标题:
Java中的继承、封装、多态、抽象
1.继承
java 和某些面向对象语言(如 c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承。即java 中一个类只能继承于另一个类。我们将被继承的类称之为父类(基类),继承类称之为子类(派生类)。在java 中用关键字extends 来实现单继承。实现继承关系的类之间有着必然的联系,不能将不相关的类实现继承,就象人类不能继承于鸟类!
那怎么去判断类和类之间是否有着必然联系呢?实际上,前面我们已知当某类A和类 B之间有着共同的属性和行为时,那么类A 和类 B之间就可能是继承关系或者有着共同的父类。继承带来了三个好处:减少代码冗余;维护变得简单;扩展变得容易。构造方法不能被继承!一个类得到构造构造方 法只有两种途径:自定义构造方法;使用JVM分配的缺省构造方法。但是,可以在子类中可以通过super关键字访问父类的构造方法。
继承:好比如你继承你老爸的事业,等于你有了你老爸一样的东西。
在程序里,以class A是爸,class B extends A代表B继承A,B也就有了A的一切,即属性与方法。
但不能拥有你爸爸的秘密的东西,比如他的日记,也就是不能继承私有属性与方法。
2.多态
运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种 表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。方法的重写Overriding和重载Overloading是Java多态性的不同表现。
多态性:发送消息给某个对象,让该对象自行决定响应何种行为。
通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用
3.抽象
所有编程语言的最终目的都是提供一种“抽象”方法。
汇编语言是对基础机器的少量抽象。后来的许多“命令式”语言(如FORTRAN,BASIC 和C)是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了长足的进步,但它们的抽象原理依然要求我们着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于“方案空间”)与实际解决的问题模型(位于“问题空间”)之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如LISP 和APL,它们的做法是“从不同的角度观察世界”——“所有问题都归纳为列表”或“所有问题都归纳为算法”。PROLOG 则将所有问题都归纳为决策链。对于这些语言,我们认为它们一部分是面向基于“强制”的编程,另一部分则是专为处理图形符号设计的。每种方法都有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显得非常笨拙。
面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话
语。与我们以前见过的相比,这无疑是一种更加灵活、更加强大的语言抽象方法。总之,OOP 允许我们根据问题来描述问题,而不是根据方案。然而,仍有一个联系途径回到计算机。每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现实世界的“对象”或者“物体”相比,编程“对象”与它们也存在共通的地方:它们都有自己的特征和行为。
4.封装
封装是JAVA面向对象的特点的表现,封装是一种信息隐蔽技术它有两个含义,即把对象的全部属性和
全部服务结合在一起,形成一个不可分割的独立单位,以及尽可能隐藏对象的内部结构,也就是说,如果
我们使用了封装技术的话,别人就只能用我们做出来的东西而看不见我们做的这个东西的内部结构了。
封装:就是遥控车一样,你有个遥控,就能控制车子,但你是看不到遥控的电路设计的,因为你不必
要知道,为什么要封闭,就怕你乱接电路,让遥控用不了。
程序里,在属性和方法前面加上private关键字,就表示封闭属性和方法了,只能类的内部访问。
在java中是通过各种访问限定符来实现数据封装的,共分为四种访问级别(由高到低):
private(私有)、friendly(缺省)、protected(受保护)、public(公共)。注意:以上四种访问修饰符可以
作用于任何变量和方法,类只可以定义为默认或公共级别(嵌套类除外)。
public(公共)
当变量或方法被public修饰时,该变量和方法可以在任何地方(指的是任何包中)的任何类中被访问;
protected(受保护的)
当类的变量或方法被 protected 修饰时,该变量和方法只可以在同包中的任何类、不同包中的任何当前
类的子类中所访问。即不同包中的任何不是该类的子类不可访问级别为protected的变量和方法。
friendly(缺省的)
当类的变量和方法没有显式地被任何访问区分符修饰时,该变量和方法的访问级别是缺省的。缺省的变量
和方法只能在同包的类中访问。
private(私有的)
被 private 所修饰的所有变量和方法只能在所属类中被访问。即类的私有成员和变量只能在当前类中被
访问。
作者:
城南年少
时间:
2015-7-14 19:34
最好应该用自己的话理解,这个太书面化了
作者:
Love丶cd
时间:
2015-7-14 19:42
力挺,好认真的样子。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2