封装、继承、多态--java

0.绪论  

  面向对象的三大特性是封装、继承和多态。本文以java为例简述这三个概念在java语言中的具体体现。

  首先说明一下,在java中,一个对象就是一个java类的一个实例。在一个java类中,包括数据成员和方法成员,其中数据成员又被称为属性,方法成员简称为方法。

1.封装

  1.1 概念:封装是指把对象(即java类)的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口(接口是指外部可访问的数据成员和方法成员)。

  1.2 优点/产生原因

  (1)安全性:类使用者只能通过暴露的接口去使用该类的实例,避免了类使用者对该类对象的不当操作(eg.使用者不小心修改了对象的某个私有数据成员,导致在调用该对象某个方法时结果与预想结果不一致);

  (2)灵活性:在保证暴露的接口不变的情况下,类创建者可以任意修改被隐藏的部分,而不用担心对类使用者造成影响。

  1.3 在java中如何实现封装

  封装的实质是访问控制,其目的是控制类使用者对类中成员(包括数据成员和方法成员)的访问权限。在java中,使用publicprivateprotected三个关键字来进行访问控制。其中,public关键字表示紧随其后的元素对任何人都可用;private关键字表示除类型创建者和类型的内部方法之外的任何人都不能访问;protected关键字表示除类型创建者、类型的内部方法和继承类(即子类)外的任何人都不能访问。

  在没有使用这三个关键字的情形下,java默认的访问权限是包访问权限,即某个类的成员可以被与该类处在同一个包中的其他类访问。(包,就是文件目录或者文件夹的意思。)

  注意点:public、private和protected是java中的访问限制词,不仅可以用于修饰数据成员、方法成员,可以用于修饰class、interface等。

2.继承

  2.1 概念:继承是指在已有类的基础通过修改或者添加其数据成员、方法成员形成一个新的类。

  继承的层次如图2.1所示,箭头表示导出类继承了基类。已有类被称为基类或者父类,形成的新类称为导出类,也称子类

图2.1 继承层次UML图

  2.2 子类和基类可能的组合形式:

  (1)子类和基类完全一致;(这种形式比较少见,与基类完全一致的子类毫无意义。)

  (2)子类和基类对外提供的接口完全相同,但子类重载重写(overriding,又称覆盖)了基类的某些方法;(关于重载和重写请阅读方法重载和重写--java

  (3)子类在基类对外提供的接口之上新添加了接口;

  (4)子类既新添加了接口,又重写了基类的某些方法((2)和(3)的综合);

   总结:子类可以通过方法重写或新添加数据成员、方法成员两种方式来使得自身与基类不同。

  2.3 优点/产生原因:代码复用(可以通过复用基类代码创建一个与基类类似的类)

  2.4 注意点:通过继承,子类对象既可以看作是子类类型,也可以看作是基类类型。但是,基类对象则只能是基类类型(除非子类与基类完全一样)。

3.多态 

  3.1 产生原因:多态与继承密不可分,本文2.2中提到在继承中子类与基类产生差异的方法包括重写基类方法和新添加数据成员、方法成员两种方式,新添加数据成员和方法成员的方式很自然地扩展了基类。但是,当子类重写基类方法时,该方法至少有两个不同的实现,这就带来了一个问题:程序运行该方法时如何选择该方法的具体实现?多态,正是为了解决这一问题产生的。

  3.2 概念:多态,又称为后期绑定,是指当向对象发送消息时,被调用的代码直到运行时才确定。通俗一点说,多态就是指在子类重写了基类的方法(假定方法名为A)的情形下,在程序中创建一个子类对象并声明该对象类型是基类类型,调用该对象的A方法会执行子类的A方法,而不是基类中的A方法。

  多态实例:在下面的代码中,在同一目录下创建了三个java文件:Base.java,Sub.java和Test.java。其中,Base.java中创建了Base类,Base类中只有一个方法A;Sub.java通过继承Base类创建了Sub类,并在Sub类中重写了Base类的A方法;最后,在Test.java中的main方法中创建了一个Sub对象eg,并且eg被声明为Base类型。调用对象eg的A方法,通过输出结果,可以看出java编译器在运行时执行的是Sub类中的A方法,而不是Base类中的A方法。这正是多态的体现。

 1 //Base.java:基类
 2 public class Base{
 3   public void A(){System.out.println("This is Base Class.");)}
 4 }
 5
 6 //Sub.java:子类
 7 public class Sub extends Base{
 8   public  void A(){System.out.println("This is Sub Class.");}
 9 }
10
11 //Test.java:多态测试
12 public class Test{
13   public static void main(String[] args){
14     Base eg = new Sub();
15     eg.A();
16   }
17 }

//输出结果This is Sub Class.

4.总结

  继承和多态是由java编译器保证的,程序开发者只需要理解其思想并按指定规则(通过extends实现继承,通过方法重写和重载实现多态)去做即可,而封装则需要程序开发者去完整实现。

原文地址:https://www.cnblogs.com/walkingzq/p/8465579.html

时间: 2024-08-26 06:12:28

封装、继承、多态--java的相关文章

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

类与对象 面向对象和面向过程对比 面向对象三大特征:封装 继承 多态

 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 1. 面向过程: 一切以事物的流程为核心. 核心是"过程"二字, 过程是指解决问题的步骤, 即, 先?干什么, 后干什么. 基于该思想编写程序就好比在编写一套流水线. 是一种机械 式的编程

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

封装继承多态到底讲的是什么

封装继承多态到底讲的是什么 封装.继承.多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念.所以想要弄明白封装.继承.多态,首先就要先了解面向对象概念. 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来.封装就是把一些特征或功能组合到一个抽象的对象上.就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等.功能有计算等.那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能.但这个“电脑”不是实物,它代表

三大特性:封装,继承,多态

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体.在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问.通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对

面向对象的三大特性---封装继承多态

面向对象的三大特性---封装继承多态 首先我们来创建一个控制台程序 新建一个父类Person 创建一个子类继承父类Person 子类: main函数: 输出结果: 根据结果显示创建子对象,首先调用父类的构造函数在调用子类的构造函数. 继承的传递性 例如: A:B,B:C,则A:C ⅰ.继承过来之后被隐藏,有意隐藏加一个关键字"new",如果加了关键字"new",就告诉子类,父类里面的sayHi只能被隐藏,不能被覆写  ⅱ.继承过来之后被覆写/重写,覆写需要在父类里面

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以

OOP三大核心封装继承多态

OOP支柱 3 个核心:封装 继承 多态 封装就是将实现细节隐藏起来,也起到了数据保护的作用. 继承就是基于已有类来创建新类可以继承基类的核心功能. 在继承中 另外一种代码重用是:包含/委托,这种重用不是父子类的继承关系,而是一个类定义为另一个类的成员变量. 一个简单的例子,汽车和收音机,汽车里面有一个收音机,不能说继承,不符合逻辑,只能说是一种对象包含了另一个对象.汽车对象中调用了收音机对象中的方法. 多态就是同一请求,不同的响应操作. 多态 同一种方式处理相关对象的能力. 相同的请求操作不同

面向对象三大特性(封装/继承/多态)

引入:在面向对象思想中,有三大特性,封装  继承  多态. 思考:我们在使用类和对象实现编程的时候,到底是遵循这什么样的逻辑呢?为什么要这样规范类呢? 引入:面向对象很重要的思想就是隐藏,即外部不知道类内部是如何实现业务逻辑的,只管调用和使用结果,这个就是面向对象三大特性之一:  封装 1.封装[掌握] 定义:封装,字面意思就是将内容装到某个容器中,并进行密封保存,在面向对象思想中,封装指数据和对数据的操作捆绑到一起,形成 对外界的隐藏,同时对外提供可以操作的接口. 1.数据:即要操作的数据,在