(Java)类的封装、继承和多态

原创 2013年12月05日 17:20:12


封装、继承与多态是面向对象程序设计的三个核心特性。

封装是面向对象技术中的一个重要概念,是一种信息隐藏技术,它体现了面向对象程序设计的思想。继承是面向对象程序设计方法的一个重要手段,通过继承可以更有效地组织程序结构,明确类间的关系,充分利用已有的类来完成更复杂、更深入的程序开发。而多态允许以一种统一的风格处理已存在的变量和相关的类,多态性使得向系统增加功能变得容易。

1、封装

封装的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共变量和公共方法,而看不见方法的具体实现细节,也不能对类中非公共的数据进行操作。这样可以防止外部的干扰和误用。 

封装的目的在于将对象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只须用设计者提供的接口来访问对象。同时减少了程序各部分之间的依赖性,降低了程序的复杂性,由于隐藏了其内部信息的细节,使内部信息不易受到破坏,安全性有了保证,同时也为外界访问提供了简单方便的界面。

Ø 封装的实现 

 Java定义了4种访问权限:公有的(public)、保护的(protected)、私有的(private)和默认的。

类成员访问权限

 

同一个类

同一个包

不同包中子类

其他包

public

protected

 

默认

 

 

private

 

 

 

 

2、继承

继承是一种由已有类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类。新类继承一般类的状态和行为,并根据需要增加它 自己的状态和行为。 

从现有类出发定义一个新类,称为新类继承了现有的类,其中被继承的现有类叫做超类(superclass)或父类,由继承而得到的类称为子类(subclass

Ø 成员变量的继承 

子类继承父类中所有可被子类访问的成员变量。继承原则如下: 

1. 能够继承那些声明为publicprotected的成员变量。 

2 能够继承同一包中的那些默认修饰符的成员变量。

3 不能继承那些声明为private的成员变量。 

4 如果子类声明一个与父类成员变量同名的成员变量,则不能继承父类的成员变量。此

时子类的成员变量称做隐藏了父类的成员变量。 

总之,子类可继承父类的publicprotected和默认修饰变量,不能继承private变量。反之,如果父类不允许其子类访问它的某些成员,那么它必须以private方式声明该成员。这一点充分体现了类封装的信息隐蔽原则。

Ø 成员方法的继承 

子类继承成员方法的规则类似于继承成员变量的规则:子类继承父类中所有可被子类访问的成员方法。继承规则如下: 

1. 能够继承那些声明为publicprotected的成员方法。 

2. 能够继承同一包中的默认修饰符的成员方法。

3 不能继承那些声明为private的成员方法。

4 不能继承父类的构造方法。 

如果子类方法与父类方法同名,则不能继承。子类方法称为覆盖了父类中的那个方法。 

总之,子类可继承其父类的publicprotected和默认修饰方法,不能继承private方法。子类除了可以继承父类中的变量及方法,还可以增加自己的成员。当一个父类成员不适合该子类时,子类会重新定义它,如果是重新定义的是成员变量就是隐藏父类的变量,如果是成员方法就是覆盖父类的方法。

 

3、多态

多态是指一个名字可具有多种语义。在面向对象语言中,多态是在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法。通常有两种途径实现多态:方法的重载和覆盖。 

多态性允许以统一的风格处理已存在的变量及相关的类。多态性使得向系统增加新功能变得容易。继承性和多态性是降低软件复杂性的有效技术。

Ø 方法重载时: 

参数必须不同即参数个数不同,类型也可以不同。 l 

返回值可以相同,也可以不同。 

重载的价值在于它允许通过使用一个普通的方法名来访问一系列相关的方法。当调用一个方法时具体执行哪一个方法根据调用方法的参数决定,Java运行系统仅执行与调用的参数相匹配的重载方法。尽管Java并没有规定重载方法之间必须有联系,但习惯上,为了程序的可读性,最好重载相同含义的方法。

Ø 方法的覆盖 

在前述继承规则中有一条:子类继承超类中所有可被子类访问的成员方法,如果子类方法与超类方法同名,则不能继承,此时子类的方法称为覆盖(override)了超类中的那个方法。

在进行覆盖时,应注意以下三点: 

子类不能覆盖超类中声明为finalstatic的方法。 

子类必须覆盖超类中声明为abstract的方法,或者子类也声明为abstract l 

子类覆盖超类中同名方法时,子类方法声明必须与超类被覆盖方法的声明一样。  

方法的覆盖与类的继承有密切的关系。覆盖体现了子类补充或改变超类方法的能力。通过覆盖使一个方法在不同的子类间表现出不同的行为。

 

重载与覆盖的区别 

1、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。 

2、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。 

3、覆盖要求参数列表相同;重载要求参数列表不同。 

4、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。

黑马程序员_java基础-封装继承多态

面向对象的三大特征:封装 继承 多态. 一.简述面象对象 面向对象就是采用”现实模拟”的方法设计和开发程序. 面向对象技术利用”面向对象的思想”去描述面象对象的世界,实现了虚拟世界和现实世界的一致性,...
  • zhengylsc
  • zhengylsc
  • 2013年11月23日 15:57
  • 9720

java中,什么是封装,继承,多态和抽象,好处与用法

Java的四大特性分别是封装,继承,多态与抽象。 1.封装 封装的概念:把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。 封装的好处:...
  • hs2201056
  • hs2201056
  • 2017年03月11日 23:56
  • 1355

Java封装、继承和多态

前言:假如生活欺骗了你,
  • wu371894545
  • wu371894545
  • 2016年11月24日 10:19
  • 11286

java基础继承封装多态

  • 2013年04月01日 14:36
  • 60KB
  • 下载

Java语言中的类的继承和多态

  • 2008年12月01日 16:37
  • 4KB
  • 下载

Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳

  • 2008年12月24日 01:44
  • 250KB
  • 下载

java之 ------ 类的封装、继承和多态(一)

问题:① 完善set()方法,保证获得正确的日期值(合法性); ② 将tomorrow()和yestoday()方法合并为以下daysAfter()方法,并增加一些方法: public int...
  • u011479875
  • u011479875
  • 2015年05月02日 11:32
  • 732

Java类、对象、封装、继承、多态、打包器详解--(五)

一、面向对象基本概念:类、对象、封装、继承、多态、打包器 (1)   封装:就是把数据和行为结合在一起形成统一的整体,并对对象使用者隐藏数据的实现过程。 (2)   继承:Java继承是使用已存在的类...
  • fanyun_01
  • fanyun_01
  • 2016年03月26日 09:22
  • 789

java之 ------ 类的封装、继承和多态(四)

问题: 声明颜色类Color。一种颜色由(红、绿、蓝)三元色值组成,称为RGB值。一个int整数可表示一种颜色,结构为:最高字节全1,其后3字节分别存储“红、绿、蓝”单色值,单色值范围是0~255。...
  • u011479875
  • u011479875
  • 2015年05月02日 11:44
  • 1238

Java-面向对象(继承、封装、多态、内部类、异常)

一.定义 什么是面向对象:复杂问题 简单化,由执行者变为指挥者 面向对象的概念: 1.这是一种基于面向过程的思想 2.将功能封装进对象,强调具备了功能的对象 面向对象特点: 1.面...
  • zz008989
  • zz008989
  • 2014年05月31日 19:21
  • 598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(Java)类的封装、继承和多态
举报原因:
原因补充:

(最多只允许输入30个字)