面向对象的三大特征,封装、继承、多态的个人理解以及代码分析
面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写,
不知道过程就找不到结果,找到实现过程就可以得到实现结果。
例如: 我们在外打工租房子,我们需要了解每个每个房屋的出租信息,不然是找不到房子的。
面向对象:对象帮我们做事情,找到对应的对象我们就可以得到想要的结果。
例如: 我们找房子不在如此的繁琐,只要找到中介我们就不怕没有地方住,中介会帮你找房子,你只需支付对应的服务费即可。
面向对象的三大特征给我们带了巨大的好处,下面我们就来讲解一下。
1.什么是封装?
1.1 封装是面向对象的三大特征之一。
1.2 它就是把细节信息封装起来,对外提供操作它的对应的方法。
例如:就像一辆车,你从来不关心它是怎么建造的,你只需要懂怎么操作它就可以了。
2.怎么实现封装
2.1 封装的实现方式就是将你需要封装属性提到一个公共的类中,
将属性私有化,对外提供setter,getter方法,对需要重复使用的实现过程进行抽取为方法。
3.封装的好处
3.1 封装使整个软件开发复杂度大大降低。
3.2 将需要重复使用的实现过程进行封装,提高代码的重用性。
3.3 你只需找到其对应的方法即可,无需关系它是怎么实现的。
3.4 私有化数据将数据隐藏,对无需安全考虑的数据通过setter,getter往外提供,对需要考虑安全问题的数据进行私有化。
3.5 你可以对其参数进行限定,适应你的业务范围。
例如:就像年龄一样,你声明的参数类型为int,int是可以为负值的,
但是在我们的现实生活中,
年龄是没有负值的,这时你可以将年龄对应的setter方法内添加一个
if-else if-else来限制它的范围
1 package com.jq; 2 3 /** 4 * 封装 5 */ 6 public class PackageDemo { 7 /** 8 * 将抽象的事物共有的属性进行私有化 9 */ 10 private String name; 11 private int age; 12 /** 13 * 将不需要对外提供的属性进行私有化。 14 */ 15 private String phone; 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public int getAge() { 26 return age; 27 } 28 /* 29 可以对传入参数进行限定来适应业务需求 30 */ 31 public void setAge(int age) { 32 if(age<0){ 33 this.age = 1; 34 }else if(age>1000){ 35 this.age=1000; 36 }else{ 37 this.age = age; 38 } 39 } 40 41 /* 42 * 无需关注代码细节,只需调用即可 43 */ 44 public void eat(){ 45 System.out.println("吃东西"); 46 } 47 /* 48 提高代码的重用性 49 */ 50 public Object add(Double numa,Double numb){ 51 return numa+numb; 52 } 53 54 public static void main(String[] args) { 55 //直接调用方法实现功能,降低了代码的复杂度,也无需关系代码的实现过程 56 System.out.println(new PackageDemo().add(1d,2d)); 57 } 58 }
1.什么是继承 1.1 继承就是将共有特征或者行为进行向上抽取,将其共有的东西进行实现或者抽象化。 例如:小明跟小丽都有年龄、性别和名字,人类也有这三个特征, 人类的范畴比小明小丽这个特有个体的范围大,所以可以将年龄、 性别和名字这三个特征向上抽取。 小明跟小丽都是人,都有吃东西这个功能,所以可以向上抽取, 但是小明可能是南方人,小丽可能是北方人,一个是吃面食,一个是吃水稻的。 所以可以将这个共有的行为抽象化。让小明小丽这个特有的个体来进行实现。2.怎么样继承 2.1 只需将共有的特征或者行为封装为对象,然后使用extends这个关键字进行继承即可。 如有抽象方法需要对抽象方法进行实现。3.继承的好处 3.1 继承的好处是对共有的属性或者行为进行向上提取,降低了代码的复杂度。 3.2 继承为实现多态提供了前提,没有继承就没有多态。4.注意事项 4.1 继承时子类共有方法会覆盖父类的共有方法。 例如:子类父类都有吃东西的方法,子类是吃饭,而父类是吃东西, 在使用多态类创建对象( Fu fu = new Zi() )时,调用eat方法是时,会是吃东西而不是吃饭。 4.2 继承时子类属性不会覆盖父类的属性。
package com.jq;/*** 继承*/ abstract class human {//抽取共有特征 String name;int age;//抽取共有方法,特有行为让其子类实现public abstract void eat();@Overridepublic String toString() {return "human{" +"name='" + name + '\'' +", age=" + age +'}';} } class XiaoMing extends human{public XiaoMing() {super.name="小明";super.age=25;}public void eat() {System.out.println("吃面");} } class XiaoLi extends human{public XiaoLi() {super.name="小丽";super.age=18;}public void eat() {System.out.println("吃面");} } public class ExtendsDemo {public static void main(String[] args) {System.out.println(new XiaoMing());System.out.println(new XiaoLi());}}
1.什么是多态 1.1 多态就是同一个事物但是他具有多种形态。 例如: 一只二哈,二哈是一只狗,二哈是犬科动物,二哈是一直动物,这就是多态。2.怎么实现多态 2.1 只需具有继承关系,然后进行类型转换即可。3.多态的好处 3.1 多态切换多种形态来使用特有的方法。4.多态的弊端 4.1 只能使用本形态下的属性和方法。 4.2 如果在使用数组或者没有使用泛型的集合内的对象时,需要用到子类特有的方法,必须用instanceof这个关键字来进行类型判断, 否则有可能会出现ClassCastException这个异常。
package com.jq;/*** 多态*/ class Dog {String name="二哈";public void call(){System.out.println("汪汪汪汪");}} class erha extends Dog {public void eat(){System.out.println("吃的一手好狗粮");} } class xiaomao {public void call(){System.out.println("喵喵喵");}} public class PolymorphicDemo {public static void main(String[] args) {Object[] animal = {new erha(),new xiaomao()};for (Object o : animal) {/*Dog dog =(Dog)o;dog.call();以上代码会抛异常 java.lang.ClassCastException: com.jq.xiaomao cannot be cast to com.jq.Dog*/if(o instanceof Dog){Dog dog =(Dog)o;dog.call();}else if(o instanceof xiaomao){xiaomao cat =(xiaomao)o;cat.call();}}}}
转载于:https://www.cnblogs.com/GGYC/p/10947052.html
面向对象的三大特征,封装、继承、多态的个人理解以及代码分析相关推荐
- python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)
面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...
- Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]
✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...
- OC面向对象的三大特征(封装 继承 多态)习题2 复合
复合:一个类中有一个成员变量是另外一个类的对象. 比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等.这些东西的研发都是很复杂的过程.如果现在有成型的CPU等组件,就可以直接用这些组件攒一 ...
- Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态
Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...
- 三大特征 封装 继承 多态
''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...
- 面向对象的四大特征 封装 继承 多态 抽象
1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可 ...
- java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法
面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...
- 深入理解Java面向对象三大特性 封装 继承 多态
1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...
- Java面向对象三大特性(封装继承多态)解释及案例
文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...
最新文章
- 英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器
- 高温保护_连续4天高温预警!高温作业,这些劳动保护知识一定要懂!
- VirtualBox中修改Ubuntu-server分辨率
- VTK:结构化网格之GetLinearPointId
- 算法-排序-选择排序
- jqueryd登录异步请求 java,ajaxd的js和jquery实现
- UVa 816 (BFS求最短路)
- 2021高校毕业生薪酬Top100出炉!
- java环境变量配置 - win10
- 从HP收购ArcSight看SIEM/MSS市场现状与格局【9月17日更新】
- IOS 学习笔记(3) 视图UITabbarController
- 如何强制gradle重新下载依赖项?
- perf 函数调用性能(函数流程图)
- 通过Web.config中的configSections配置自己系统的全局常量
- QT自动检测系统语言代码
- 网易有道笔试题(2014届,2013.10北邮站)
- 初等变换和阶梯矩阵【】
- 三轮全向轮底盘SLAM挖坑系列-简介
- Hello-Rust
- 从ADK的WinPE自己手动构建自己的PE
热门文章
- docker重启mysql数据丢失_mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发
- 网络编程--sockaddr 与 sockaddr_in
- C++代码片段(二)判断可变模板参数中是否包含某一特定类型
- C++学习笔记-----operator=函数处理自赋值
- linux更改python版本链接
- Android代码片段:设备信息
- Linux多线程编程(一)---多线程基本编程
- Redis设计与实现AOF持久化
- SQL数据库权限授予grant
- 汇编转跳指令 (J开头的)