Java 面向对象封装、继承、多态——编程思想总结

什么面向对象?一句话,万物皆对象。


比如,人是一个类,男人或女人就是人类的对象。而面向对象思想强大之处是,我们可以继续划分类,比如,前面说的人类可以属于动物类,那么本属于人类的男人或女人,也可以属于动物类。


面向对象三大特性是什么?封装、继承、多态。


首先,我们先通过一个有趣的比喻说明来理解。

      首先说定义一类人被封装成“贪官”,我们就是平民老百姓类,他们贪得无厌做了很多坏事,但是我们不能随便去曝光他们,因为贪官很聪明,通过自身封装,有保护权限了。我们知道他们的信息都是公开(public)的,这些信息都是为人民服务、精忠报国啥的,但是背后那些损人利己的私事private、protected,我们无法知道。这其实就是一种封装,可以设置访问代码信息权限的功能,下面说继承,官二代。

      我们都知道,他们的儿子就是官二代孙子就是官三代,因为是继承关系,后辈们不用从底层奋斗就可以享受很好待遇,从出生就有权有钱比老百姓们奋斗至少十年。所以,继承的功能就是避免重复代码、减少开发时间。

      但是俗话说“有其父必有其子”,贪官腐败自私自利,后辈们也都会做出一些狗血的事情来,好的坏的都有,比如什么“开车撞人的我爸是李刚”之类的,呵呵,这就是一种变态,说错了,是多态。属于子类重写父类的多态性。

封装

  封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。 

 意义:

  封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。


  封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。

  使用属性不仅可以控制存取数据的合法性,同时也提供了“读写”、“只读”、“只写”灵活的操作方法。

访问修饰符:

Private:只有类本身能存取.

Protected:类和派生类可以存取.

Internal:只有同一个项目中的类可以存取.

Protected Internal:是Protected和Internal的结合. 

Public:完全存取.


继承

 继承主要实现重用代码,节省开发时间。

1、C#中的继承符合下列规则:

继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员。Object类作为所有类的基类。

派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。

构造函数和析构函数不能被继承。除此之外的其它成员,不论对它们定义了怎样的访问方式,都能被继承。基类中成员的访问方式只能决定派生类能否访问它们。

派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员。但这并不因为这派生类删除了这些成员,只是不能再访问这些成员。

类可以定义虚文法、虚属性以及虚索引指示器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。 

2、new关键字

   如果父类中声明了一个没有friend修饰的protected或public方法,子类中也声明了同名的方法。则用new可以隐藏父类中的方法。(不建议使用)

3、base关键字

 用于从派生类中访问基类的成员,调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。 


多态

  同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

多态性:

编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。 

运行时的多态性
  运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。 

编译时的多态性

为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

实现多态:

接口多态性。
继承多态性。
通过抽象类实现的多态性。 
override关键字:
重写父类中的virtual修饰的方法,实现多态。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾阳Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值