一、面向对象思想

面向对象思想:一切皆对象。

不同角度看同一个事物得到的结果是不一样的,对于”火“来说,化学家看到的是组成、燃烧的元素,物理学家看到的是其温度、焰心等物理特性,画图者看到的是他的颜色、形态等外部表现,而站在面向对象的角度,则会看到其具有温度、颜色的属性,具有燃烧的功能等。思想是逐渐发展升华,提炼出更优秀的精髓。站在面向对象的角度看待一个问题,不只是关注问题过程中所涉及的动作,而是更关注问题中涉及的对象具有的属性和功能,这一点更类似实际生活中的事物。事实上,面向对象思想的萌发也就是对现实事物的抽象提炼。

面向对象思想:一切皆对象,一切对象均源自现实。所以通过面向对象思想来分析问题,更关注问题中所涉及的对象,而不只是问题中所涉及的具体过程。

二、面向对象三大特性

  • 封装(Encapsulation)

封装:隐藏对象的属性和实现细节,只对外提供公共的访问方法。

对于属性和方法,java提供了四种访问权限,按照权限由小到大分别:private、default、protected、public。

        /** private:类内部可访问* default:包内部可访问* protected:继承关系之间可访问(就算是不同包,但是具有继承关系)* public:哪里都可以访问*/

为什么需要封装?一方面通过封装可以按照设计者的意愿对外提供更便捷的接口,就好像手机对外提供封装好的耳机接口一样,只要符合接口规范,就能够让调用者更便捷的来使用而不需要关注耳机接口之后的线路;另一方面通过封装隐藏了对象的内部实现细节,从而让调用者不能够违规使用和操作对象,使得程序更加安全,如果手机耳机接口对外提供的不是封装好的接口而是一堆电线,使用起来不仅麻烦,如果不小心的按照规范来搭接电线,也更容易损坏手机。

  • 继承(Inheritance)

继承:java中通过extends来实现类的继承,子类继承父类,可以获得父类除了构造函数和private修饰的内容之外的所有内容,主要是非private修饰的Field和function。

继承是java中代码复用的主要手段之一,更是三大特性“多态“的前提!

java中规定继承方式是单继承,即一个子类只能有一个直接父类;但是继承可以传递,即多重继承,一个子类可以有多个间接父类。

继承中需要关注的问题:

1. 如果父类中没有默认的构造函数,则在子类的构造函数中必须显示的super父类;

2. 重写(overwrite)和重载(overload):重写规则”二同二小一大“,即子类重写父类方法的方法名和参数列表相同,返回值类型和抛出的异常类型必须比父类的范围更小或相同,子类重写的方法的访问权限必须比父类的更大,其中需要关注父类或子类中private修饰的方法不算重写;重载规则”二同一不同“,即同一类中同一方法名不同形参列表,形参列表不同有三种方式,一是参数个数不同,二是参数类型不同,三是当参数个数和参数类型都相同的时候,参数类型的顺序不同;

3. 继承中的初始化顺序:先父后子先静态后实例;

4. 继承中的访问顺序:先子后父,先局部后实例;

  • 多态(Polymorphism)

多态:编译时类型和运行时类型不一样,即父类引用直接指向子类对象。

继承为多态的前提,多态特性则为java提供了良好的扩展性(接触都后面会有更深刻的理解)。一般来说,只有方法具有多态性,属性不具备多态性;多态中不作类型转换,则只能调用父类中声明过的方法,如果子类重写类该方法,则实际运行的是子类方法;

另外,需要注意的是静态方法是不具备多态性的,如以下例子,输出结果”father“,继承中子类重写了父类的方法,则调用的时候运行的是子类的方法

package inheritance;public class Father {public static void show(){System.out.println("father");}
}
package inheritance;public class Son extends Father {public static void show(){System.out.println("son");}
}
package inheritance;public class Main {public static void main(String[] args) {//输出fatherFather father = new Son();father.show();//输出sonSon son = new Son();son.show();}
}

补充——

this、static和super

this:就像一个指向自己的指针,主要有三种用法。一是当局部变量和成员变量同名的时候,用this.filedName调用成员变量,二是一个类的方法中调用另一个方法,this可以省略,但这个this代表一个对象,三是在构造函数中调用另一个构造函数,调用无参构造函数形如this(),调用有参形如this(para type);,需要指出的是这个必须在调用的构造函数第一行调用。

super:就像一个指向父类引用的指针,主要也有三种用法,一是当自类定义了和父类相同的成员变量时,通过super.filedName来调用父类中声明的变量,当然该变量不能用private修饰,二是自类定义和父类同名的方法的时候,子类可以通过super.functionName来调用父类方法,三是在子类构造函数中调用父类的构造函数,通过super()或super(para type);来调用,当然也必须放在构造函数的第一行。

static:static表示类相关,可以用来修饰属性、方法和内部类已经代码块等,static在对象创建之前初始化完成和类相关,只要类加载完成,static修饰的变量和方法等也就初始化完成,因此不能在局部中引用修饰。如果一个类中定义了一个static的变量,则表示该变量属于该类所有成员,而该变量会在该类第一次被加载进内存的时候初始化完成,之后无论实例化多少次也都不会再次初始化。另外,对于static修饰的属性和方法,优先使用类名调用,不推荐使用对象来调用。

附注:

本文错漏之处,烦请不吝指正,不胜感激!



【java】面向对象(三大特性)相关推荐

  1. 【职坐标】java面向对象三大特性(二)——继承详解

    [职坐标]java面向对象三大特性(二)--继承详解 a) 什么是继承? i. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可 b) ...

  2. java 面向对象三大特性之继承 万字详解(超详细)

    目录 前言 : 一.为什么需要继承: 二.什么是继承(Warning : 篇幅较长)? 1.继承概述: 2.子类继承父类之后达到的效果 : ①如何使用继承? ②代码演示 : 3.继承的使用场景: eg ...

  3. 夯实Java基础系列1:Java面向对象三大特性(基础篇)

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. java 面向对象三大特性之多态 万字详解(超详细)

    目录 前言 : 一.为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二.什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三.多态的 ...

  5. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态

    ​ 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...

  6. java面向对象三大特性难吗_JAVA面向对象的三大特性

    JAVA面向对象的三大特性 每一对象是其状态和行为的封装.类是按一定体系和层次安排的,使得子类可以从超类继承行为.在这个类层次体系中有一个根类,它是具有一般行为的类.Java程序是用类来组织的.下面是 ...

  7. Java面向对象三大特性(封装、继承、多态)

    文章目录 前言 一.封装 1. 封装的概念 2. private实现封装 3. getter和setter方法 4.封装的好处 二.继承 1. 继承的概念 2. extends实现继承 3. supe ...

  8. java面向对象三大特性理解

    面向对象主要由三大特性: 封装 继承 多态 一.封装定义: 编写一个类就是对数据和数据的操作封装,封装即时隐藏一切可隐藏的东西,只向外界提供最简单的编程接口.(简单的来说在Java中一个文件包下的类文 ...

  9. Java面向对象三大特性详解

    一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. 隐藏类的实例细节,方便修改和实 ...

  10. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

最新文章

  1. SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
  2. Remote System Upgrade With Cyclone III Devices
  3. Django中HttpResponse和JsonResponse的区别和用法
  4. 今日arXiv精选 | 15篇EMNLP 2021最新论文
  5. 1042. 字符统计(20)
  6. 中countif函数_countif与countifs:单条件与多条件计数适用场景
  7. linux中mac地址路径,MAC地址
  8. 你真的知道 Python 字符串怎么用吗?
  9. 微博队列memcacheq 服务安装与原理
  10. zabbix监控业务进程变动
  11. 计算机键盘训练软件,键盘打字练习软件(TypingMaster)
  12. 【Docker】安装-win7
  13. win10系统 插耳机或音箱在前置没有声音的解决方案
  14. 关于 Win10 截图 截屏 原生截图工具 基础使用
  15. 全网最详细的深度学习pytorch-gpu环境配置
  16. 记录--嵌入式设备生成二维码
  17. 如何进行测试用例评审
  18. OPPO A59m刷机包|OPPO A59m官方线刷包救砖
  19. STATA闪退,CLDS数据无法转码
  20. Fluke DTX-CHA001/DTX-CHA001A/DTX-CHA002的区别

热门文章

  1. 如何快速系统学会使用SPSS?
  2. 南京擎天科技公司java笔试题_南京擎天科技 笔试面试 经验
  3. 我给财务女神写了个批量发工资脚本!她让我做她闺蜜?不应该是...
  4. TCP服务器客户端编程流程
  5. 计算机系统时间无法更改,电脑无法修改系统时间如何解决
  6. 零基础学通C语言,福利来啦!!!!zfhl.ke.qq.com
  7. 认识和分析系统日志和日志轮循
  8. 【win10专业版】xp系统电脑静音快捷键是什么
  9. Go的channel常见使用方式
  10. 联想A670T刷机包 最新MIUI V5源码适配 更新底包