【java】面向对象(三大特性)
一、面向对象思想
面向对象思想:一切皆对象。
不同角度看同一个事物得到的结果是不一样的,对于”火“来说,化学家看到的是组成、燃烧的元素,物理学家看到的是其温度、焰心等物理特性,画图者看到的是他的颜色、形态等外部表现,而站在面向对象的角度,则会看到其具有温度、颜色的属性,具有燃烧的功能等。思想是逐渐发展升华,提炼出更优秀的精髓。站在面向对象的角度看待一个问题,不只是关注问题过程中所涉及的动作,而是更关注问题中涉及的对象具有的属性和功能,这一点更类似实际生活中的事物。事实上,面向对象思想的萌发也就是对现实事物的抽象提炼。
面向对象思想:一切皆对象,一切对象均源自现实。所以通过面向对象思想来分析问题,更关注问题中所涉及的对象,而不只是问题中所涉及的具体过程。
二、面向对象三大特性
封装(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】面向对象(三大特性)相关推荐
- 【职坐标】java面向对象三大特性(二)——继承详解
[职坐标]java面向对象三大特性(二)--继承详解 a) 什么是继承? i. 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可 b) ...
- java 面向对象三大特性之继承 万字详解(超详细)
目录 前言 : 一.为什么需要继承: 二.什么是继承(Warning : 篇幅较长)? 1.继承概述: 2.子类继承父类之后达到的效果 : ①如何使用继承? ②代码演示 : 3.继承的使用场景: eg ...
- 夯实Java基础系列1:Java面向对象三大特性(基础篇)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- java 面向对象三大特性之多态 万字详解(超详细)
目录 前言 : 一.为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二.什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三.多态的 ...
- java 面向对象多态_乐字节Java面向对象三大特性以及Java多态
以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...
- java面向对象三大特性难吗_JAVA面向对象的三大特性
JAVA面向对象的三大特性 每一对象是其状态和行为的封装.类是按一定体系和层次安排的,使得子类可以从超类继承行为.在这个类层次体系中有一个根类,它是具有一般行为的类.Java程序是用类来组织的.下面是 ...
- Java面向对象三大特性(封装、继承、多态)
文章目录 前言 一.封装 1. 封装的概念 2. private实现封装 3. getter和setter方法 4.封装的好处 二.继承 1. 继承的概念 2. extends实现继承 3. supe ...
- java面向对象三大特性理解
面向对象主要由三大特性: 封装 继承 多态 一.封装定义: 编写一个类就是对数据和数据的操作封装,封装即时隐藏一切可隐藏的东西,只向外界提供最简单的编程接口.(简单的来说在Java中一个文件包下的类文 ...
- Java面向对象三大特性详解
一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. 隐藏类的实例细节,方便修改和实 ...
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
最新文章
- SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
- Remote System Upgrade With Cyclone III Devices
- Django中HttpResponse和JsonResponse的区别和用法
- 今日arXiv精选 | 15篇EMNLP 2021最新论文
- 1042. 字符统计(20)
- 中countif函数_countif与countifs:单条件与多条件计数适用场景
- linux中mac地址路径,MAC地址
- 你真的知道 Python 字符串怎么用吗?
- 微博队列memcacheq 服务安装与原理
- zabbix监控业务进程变动
- 计算机键盘训练软件,键盘打字练习软件(TypingMaster)
- 【Docker】安装-win7
- win10系统 插耳机或音箱在前置没有声音的解决方案
- 关于 Win10 截图 截屏 原生截图工具 基础使用
- 全网最详细的深度学习pytorch-gpu环境配置
- 记录--嵌入式设备生成二维码
- 如何进行测试用例评审
- OPPO A59m刷机包|OPPO A59m官方线刷包救砖
- STATA闪退,CLDS数据无法转码
- Fluke DTX-CHA001/DTX-CHA001A/DTX-CHA002的区别