1。类是对对象的一个抽象,同时类也为对象进行了封装。所谓封装是说类的设计者只是为使用者提供类 对象可以访问的部分,而对于类中其他隐藏起来的成员变量 方法,用户不能访问。

  实现方式:A:在类的定义中设置对对象中成员变量和方法进行访问的权限;

  B:提供一个统一的供其他类引用的方法;

  C:其它对象不能直接修改文本对象所拥有的属性和方法。

  2。访问权限:

  A:private的成员变量和方法只能被这个类本身的方法访问;

  B:默认的成员变量和方法只被同一个包内的其它所有类都可访问,包外不可;

  C: protected的成员可以被这个类的本身、它的子类(同不同包均可)访问;

  D: public 完全公开。一个程序里最多只能有一个类被修饰为public,若程序中没有任何public 类,且文件名是程序中的一个类名,则该类被视做public

  注:不能用protected和private饰!!!!

  3。类的继承:

  3.1 类继承的实现:

  A:java中Object类是java中所有类的祖宗!(P209)

  儿子A extends 老爸------只能有一个老爸!

  3.2 this和super:

  this: this.数据成员 this.实例方法 this(参数)--引用本类中其他构造方法。

  super:表示当前对象父类对象的引用

  super.数据成员 super.实例方法 super(参数)--引用父类的构造方法。--通常在实现子 类的构造方法时,要先调用父类的构造方法!并且用来调用父类构造方法的super()必须放在子类构造方法的句首

  3.3 初始化顺序:

  A 对象的初始化顺序: 先静态成员,再非静态成员,再构造方法,

  B 继承中构造方法的调用顺序: 先父类,再子类。

  3.4 对象之间的类型转换:

  对象转换的圣经:只能说猫是哺乳动物,不能说哺乳动物是猫!!!当说猫是哺乳动物时,猫将失掉猫独有的属性和行为!!!(作为猫时新增的成员变量和方法)

  哺乳动物 aa=new 猫()---猫是哺乳动物(要通过IS-A测试)

  4.千呼万唤始出来------多态!

  所谓多态就是同一方法获得不同的行为特性!

  分为:

  A 编译时多态性---重载 (参数个数不同或参数类型不同)

  B 动态多态性----覆盖( 改写后的方法不能比覆盖的方法有更严格的访问权限--只能更加开放& 改写后的方法不能比被覆盖的法产生更多的例外)

  ******************************************************************

  放点小音乐吧!

  **** ******* 第一曲 final:

  1。final type 变量名=初值---常量

  2。final 方法---该方法任何时候都不可以覆盖,但可以被重载。

  3。final 类 ----该类不能被继承并覆盖其内容。(像System类,String类)

  第二曲 native: 本地引用说明符^@^

  java允许在程序中直接引用本地机上非java语言编写的程序。

  native type programName([参数列表]);

  programName是要引用的程序名,以方法的形式出现。由于是引用,具体执行的操作都包含在源程序中,所有programName后无具体方法体!

  ******************************************************************

  一。深入继承:

  1》设计继承树:

  (1)找出具有共同属性和行为的对象(狼和狗与羊^^---动物共同的属性)

  (2)设计代表共同状态与行为的类(都属于动物!---父类)

  (3)决定子类是否需要让某项行为有特定不同运作的方式(都会吃,但羊只吃草---方法的覆盖)

  (4)通过寻找使用共同行为的子类找出更多抽象化的机会(狼和狗属于犬科!!!--再继承)

  (5)检查设计是否合理(IS-A)

  (6)大功告成!

  2》继承的意义:

  (1)避免了重复的代码(子类会时时响应父类的改变)

  (2)定义出共同的协议(服务于多态^^)

  ?当定主义出一组类的父型时,你可以用子型的任何类来填补任何需要或期待父型的位置?

  二。深入多态:

  (1) class Vet{

  public void giveShot(Animal a){

  a.makeNoise();

  }

  }

  class PetOwner{

  public void start(){

  Vet v=new Vet();

  Dog d=new Dog();

  Hippo h=new Hippo();

  v.giveShot(d);

  V.giveSHot(h);

  }

  }

  在此例中如果用Animal类型来声明它的参数(返回类型、数组的类型),则程序代码就可以处理所有Animal的子类。这意味 着其它人只要注意到要扩充过Animal就可以利用你的Vet!(P168)

  如果此例不用多态,那么每一种动物都要写出不同的方法--这是何等悲哀!!

  (2)接口:

  多态意味着“很多形式”,可以把儿子当作爸爸或爷爷!!

  可以通过继承来定义相关类间的共同协议(方法就是协议的标志!),这样就等同于在对其他程序代码声明:“我所有的子类都能肠系用这些方法来执行这几项工作!”

  为了避免出现“致命方块”所以java不允许出现多继承,接口正是我们的救星!java接口是100% 的纯抽象类。而且使用接口可以继承一个以上的来源,同时其他类也可以实现同一个接口中。所以可以为不同的需求组合出不同的继承层次!

  三。如何判断应该是设计类、子类、抽象类或接口呢?

  (1)如果新类无法对其他的类通过IS-A测试时,就设计不继承其他类的类。

  (2)只有在需要某类的特殊化版本时,以覆盖或增加新的方法来继承现有的类。

  (3)当你需要定义一群子类的模板,又不想让其他人初始化此模版时,设计出抽象的类给他们用。

  (4)如果想要只定义出类可以扮演的角色,使用接口。

转载于:https://www.cnblogs.com/alleyonline/p/4903339.html

怎样理解封装,继承,多态!三者的区别?相关推荐

  1. 小白理解——封装继承多态

                                      一.封装 是什么:首先是抽象,把事物抽象成一个类,其次才是封装.对外表示为一个对象,隐藏对象的属性和动作实现的细节,仅对外公开接口. ...

  2. 面向对象的个人理解(封装/继承/多态实践)

    目录 前言 为什么要封装? 为什么要继承? 什么是多态? 前言 计算机科学是一门实践性很强的科目,所有理论都不是凭空而来的,某种理论的出现都是为了解决过往的不足.面向对象是其中之一,但我们不能单从字面 ...

  3. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

  4. 白话文带你了解 封装 继承 多态

    这里讲的仅仅是带你理解 封装 继承 多态 染好您可以移步去别的文章学习具体的实现 (只是个人理解 您可以不爱,请别伤害哦!) 首先你要知道 java是面向对象的,说白了就是我拿你当个人,请认清你的地位 ...

  5. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

  6. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  7. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  8. 面向对象 编程及面向对象三大属性:封装 继承 多态

    面向对象 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构. ...

  9. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  10. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

最新文章

  1. VC++代码转换为QT代码问题总结
  2. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程
  3. ORACLE表空间管理维护
  4. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  5. mongoose-面向对象操作mongodb的Nodejs框架
  6. 【转】5G EN-DC/NE-DC/NGEN-DC构架
  7. Junit下获取src/test/resource路径
  8. C语言叠堆在变量周围,C语言及ARM中堆栈指针SP设置的理解与总结
  9. 软件测试项目复盘,如何开始复盘测试_测试_复盘大师官网
  10. 我的世界基岩版种子和java版种子_我的世界无限循环种子
  11. 读《松本行弘的程序世界》
  12. Matconvnet完全安装及踩坑实录
  13. 文法俱乐部 第一章 基本句型及补语
  14. 计算机网络物理层之宽带接入技术
  15. 修改 Mixamo 导出的动画名字
  16. jq.ajax+php+mysql实现瀑布流缓冲加载数据
  17. 今年春节,全国物流很稳!
  18. 暗影骑士擎Pro 之 安装Ubuntu18.04 双系统 踩坑记录(一)
  19. Cookie获取问题:ajax方法后端只获取到一个Cookie,Request无法获取到自定义的Cookie
  20. 《原则》读后感(一)

热门文章

  1. 【Spring Boot】创建一个简单的Spring Boot的 Demo
  2. 什么时候跳槽,为什么离职,你想好了么?
  3. 打开U盘 提示 服务器无法运行,win10打开u盘提示“系统资源不足 无法完成请求的服务”怎么办...
  4. html table最小宽度,table宽度比tbody多1
  5. 设计模式之工厂模式(C++)
  6. 从GitHub火到了CSDN,共计1658页的《Java岗面试核心MCA版》
  7. 吴恩达-机器学习-简单决策树
  8. PMBOK 7th管理模型介绍系列--五分钟了解情境领导力
  9. 占星术杀人魔法 - 笔记
  10. Qt播放视频0x8007000e报错 DirectShowPlayerService::doPlay: Unresolved error code 0x8007000e