Java进阶01-封装、继承与多态

来源:互联网 发布:哈基姆瓦里克大学数据 编辑:程序博客网 时间:2024/04/27 15:15

面向对象的程序设计有三大特征:封装、继承、多态

1、封装性

封装性有两重含义,一是指把对象的属性和行为看成一个密不可分的整体,将这两者“封装”到一个不可分割的对象中;二是指对信息的隐蔽,尽可能隐蔽对象的功能实现细节。
封装机制的另一个特点就是为封装在一个整体内的变量及方法规定不同等级的“可见性”或访问权限。

封装的好处:
1)良好的封装能够减少耦合
2)类内部的结构可以自由修改。
3)可以对成员进行更精确的控制。
4)隐藏信息,实现细节。

2、继承性

继承是为了重用父类代码。两个类若存在is-a 的关系就可以使用继承.
复用代码是 Java 众多引人注目的功能之一,注意,这里是“复用代码”而非“复制代码”

1、子类拥有父类非 private 的属性和方法。(但继承不了构造器,只能通过super()调用构造器)
2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。(以后介绍)。

继承的好处:
1)增强了代码的可复用性
2)提高了软件开发的效率
3)降低了程序产生错误的可能性
4)为程序的修改提供了便利

继承的缺陷:
1)父类变,子类就必须变。
2)继承破坏了封装,对于父类而言,它的实现细节对与子类来说都是透明的。
3)继承是一种强耦合关系。
注:java语言不支持多继承,但可以通过接口(interface)的方式来弥补由于java不支持多继承而带来的子类不能享用多个父类的成员的缺点。

3、多态性

多态是以封装和继承为基础,在抽象的层面上实施一个统一的行为,相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。

Java 实现多态有三个必要条件:
1)存在继承关系
2)子类重写父类的方法。子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了的父类的该方法。即Father f = new Children(),f.toString()实际上调用的是Children中的toString()方法。
3)父类引用指向子类对象

多态的分类:
1)编译时多态,即方法的重载,从JVM的角度来讲,这是一种静态分派(static dispatch)
2)运行时多态,即方法的重写,从JVM的角度来讲,这是一种动态分派(dynamic dispatch)

多态的原则:
比如我们有一个父类Father,有一个子类Children
1、向上转型是自动的。即Father f = new Children()是自动的,不需要强转
2、向下转型要强转。即Children c = new Father()是无法编译通过的,必须要Children c = (Children)new Father(),让父类知道它要转成具体哪个子类。

一个多态的经典实例:多态示例

1 0