面向过程:我们以前使用的是面向过程编程,你需要清除每个实现步骤,每个步骤每行代码都要仔仔细细的编写,

     不知道过程就找不到结果,找到实现过程就可以得到实现结果。

     例如: 我们在外打工租房子,我们需要了解每个每个房屋的出租信息,不然是找不到房子的。

面向对象:对象帮我们做事情,找到对应的对象我们就可以得到想要的结果。

       例如: 我们找房子不在如此的繁琐,只要找到中介我们就不怕没有地方住,中介会帮你找房子,你只需支付对应的服务费即可。

面向对象的三大特征给我们带了巨大的好处,下面我们就来讲解一下。

    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

面向对象的三大特征,封装、继承、多态的个人理解以及代码分析相关推荐

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

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

  2. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  3. OC面向对象的三大特征(封装 继承 多态)习题2 复合

    复合:一个类中有一个成员变量是另外一个类的对象. 比如我现在要制作一台电脑,电脑需要CPU,显示器,鼠标和键盘等.这些东西的研发都是很复杂的过程.如果现在有成型的CPU等组件,就可以直接用这些组件攒一 ...

  4. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  5. 三大特征 封装 继承 多态

    ''' 1.面向对象与面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 缺点:扩展性 ...

  6. 面向对象的四大特征 封装 继承 多态 抽象

    1.封装 广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用 私有化只能代表封装的特性 可 ...

  7. java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法

    面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...

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

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

  9. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

最新文章

  1. 英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器
  2. 高温保护_连续4天高温预警!高温作业,这些劳动保护知识一定要懂!
  3. VirtualBox中修改Ubuntu-server分辨率
  4. VTK:结构化网格之GetLinearPointId
  5. 算法-排序-选择排序
  6. jqueryd登录异步请求 java,ajaxd的js和jquery实现
  7. UVa 816 (BFS求最短路)
  8. 2021高校毕业生薪酬Top100出炉!
  9. java环境变量配置 - win10
  10. 从HP收购ArcSight看SIEM/MSS市场现状与格局【9月17日更新】
  11. IOS 学习笔记(3) 视图UITabbarController
  12. 如何强制gradle重新下载依赖项?
  13. perf 函数调用性能(函数流程图)
  14. 通过Web.config中的configSections配置自己系统的全局常量
  15. QT自动检测系统语言代码
  16. 网易有道笔试题(2014届,2013.10北邮站)
  17. 初等变换和阶梯矩阵【】
  18. 三轮全向轮底盘SLAM挖坑系列-简介
  19. Hello-Rust
  20. 从ADK的WinPE自己手动构建自己的PE

热门文章

  1. docker重启mysql数据丢失_mysql如何确保数据不丢失的?我们借鉴这种设计思想实现热点账户高并发
  2. 网络编程--sockaddr 与 sockaddr_in
  3. C++代码片段(二)判断可变模板参数中是否包含某一特定类型
  4. C++学习笔记-----operator=函数处理自赋值
  5. linux更改python版本链接
  6. Android代码片段:设备信息
  7. Linux多线程编程(一)---多线程基本编程
  8. Redis设计与实现AOF持久化
  9. SQL数据库权限授予grant
  10. 汇编转跳指令 (J开头的)