文章目录

  • 前言
    • 什么是面向过程?
    • 什么是面向对象?
  • 三大基本特征
    • 封装
    • 继承
    • 多态
      • Java中的多态
  • 最后

前言

相信很多程序员在最初接触Java的时候就听过,Java中一切皆对象那么什么是面向对象呢?前言先介绍什么是面向对象和面向过程,这样有助于读者更好的理解面向对象

什么是面向过程?

面向过程顾名思义是一种以过程为中心的编程思想,自顶向下的编程模式,试想一下c语言
我们将问题分解开,一个一个函数来实现一个一个的步骤,依次调用。

也就是说在进行面向过程编程时候,可以先定义一个函数,然后使用if-else等方式执行代码,下面我们来看用面向过程实现一个简单算法——冒泡排序


#include<stdio.h>
using namespace std;
void print(int n, int *a, int cur)
{if (cur == n)//递归边界{for (int i = 0; i < n; i++){printf("%d", a[i]);}printf("\n");}else for (int i = 1; i <= n; i++){int OK = 1;for (int j = 0; j < cur; j++){if (a[j] == i)//判断i是否出现过OK = 0;if (OK)//i没有出现过下一个{a[cur] = i;print(n, a, cur + 1);//递归}}}
}
int main()
{}

自顶向下用函数来实现功能

什么是面向对象?

现在主流的面向对象的编程语言代表有:c++,java,c#……
简单的来说,面向对象,程序员将问题分解为一个一个的步骤,对每个步骤进行抽象,形成对象,通过不同对象之间的调用,组合形成问题

他之所以如此受欢迎,是因为他更符合人类的思考方式,用这种方式编写出来的代码,可拓展性,可维护性都更高,这个我们后面再说。

面向对象有3大基本特征,6大基本原则,我们在下文中逐一介绍:

三大基本特征

对事物的抽象,理解,这里就要请出面向对象的三大基本特征:封装,继承,多态

封装

所谓封装,就是把客观的事物封装为抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的类或对象隐藏信息

简单的来说,一个类就是一个封装了数据和操作这些代码的实体。我们可以人为的设定某些代码私有,不能被外界访问

好处:对内部数据的不同级别包含,防止程序中无关的部分被意外被改变

举例:

class Rectangle {public Rectangle(int length, int width) {this.length = length;this.width = width;}private int length;private int width;//areapublic int area() {return this.width * this.length;}
}

我们通过封装的方式,给矩形定义了长度和宽度

继承

继承,继承指它可以使用现有类的所有功能,并在无须编写原来的类的情况下对这些功能进行拓展,通过继承创建的新类(子类),被继承的类(父类)

举例:


class Square extends Rectangle{public Square(int length){super(length,length);//调用父类中参数的构造}
}

与现实世界一样,正方形是通过矩形派生出来

多态

多态:指一个类实例的相同方法在不同情形下有不同的表现形式
使得有不同内部结构的对象可以共享相同的外部接口

下面我们将站在广义的角度来说多态

  1. 特设多态
    例如:多态函数有不同版本的实现,通过其实参而调用相应版本的函数,函数重载和运算符重载是常见的形式
//函数重载
public class FunctionOverloading {public static int add(int a, int b) {return a + b;}//通过调用另一个重载函数实现重载public static int add(int a, int b, int c) {return add(a, b) + c;}public static void main(String[] args) {System.out.println(add(1, 2));System.out.println(add(2, 3, 4));}}
  1. 参数多态
    参数多态指声明与定义函数,复合类型,变量时不指定其具体的类型,而把这部分类型作为参数使用,使得该定义对各种具体类型都使用
    例如:Java中的泛型就是参数多态的一种,参数多态还广泛运用于函数式编程
    这个我们后面再讲
  2. 子类型
    在面向对象的程序设计中,当计算机程序运行时,相同的消息可能会发送给多个不同类别的对象,而系统依赖对象所属类别,触发对应类别的方法,产生不同的行为。
    Java中常见的多态,正是这种多态,下面我们来介绍:

Java中的多态

java 层面的多态:

Java中多态的概念比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同执行结果

为了实现运行期的多态,需要满足以下三个条件:

  1. 有类继承或者接口实现
  2. 子类要重写父类的方法
  3. 父类的引用指向子类的对象
public class parents {public void call(){System.out.println("i am parents");}
}
public class son extends parents {public void call() {System.out.println("i am sons");}
}public class Daughter extends parents {public void call() {System.out.println("i am Daughter");}
}
public class Test {public static void main(String[] args) {parents p = new son();//父类的引用指向子类的对象parents p1 = new Daughter();    p.call();p1.call();}
}

同样是Parents类的实例,p.call调用的是Son类的实现,p1.call调用的是Daughter的实现。

最后

如果对你有帮助,不妨一键三连,博主能力有限,如有差错,还请指出!

Java面向对象知识详解——三大基本特征相关推荐

  1. Java基础知识详解

    一.基础 1.Java都有哪些数据类型?基本数据类型有哪些?分别占多少字节?多少位?引用数据类型又有哪些? Java的数据类型:基本数据类型和引用数据类型 基本数据类型:byte(1),short(2 ...

  2. PHP面向对象编程详解:类和对象

    PHP面向对象编程详解:类和对象 从OOP的视角看,不应区分语言.无论是C++.无论是Java.无论是.net还有更多面向对象的语言,只要你了解了OO的真谛,便可以跨越语言,让你的思想轻松的跳跃.便没 ...

  3. 网络知识详解之:网络攻击与安全防护

    网络知识详解之:网络攻击与安全防护 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名 ...

  4. C#重点知识详解(转)

    C#重点知识详解 在微软的.NET推出后,关于C#的有关文章也相继出现,作为微软的重要的与JAVA抗衡的语言,C#具有很多优点.本文将选一些C#语言中的重要知识详细介绍, 第一章:参数 1.1 IN ...

  5. Java中super详解

    目录 Java中super详解 super的作用: 1.     通过super可以访问父类的构造方法 2.   通过super可以访问父类的属性(非私有) 3.        通过super可以访问 ...

  6. Java期末复习题详解

    Java期末复习题详解 选择题 1 .class: .java: .cpp: .txt: 2 3 4 封装: 继承: 覆盖: 重载: 5 构造函数: 特点: 6 异常处理: 注:catch可以进行多重 ...

  7. java 反射机制详解

    火星十一郎 海纳百川, 有容乃大,QQ:791909235,Tel:13137910179 posts - 774, comments - 556, trackbacks - 0, articles ...

  8. 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)

    网络知识详解之:HTTPS通信原理剖析(对称.非对称加密.数字签名.数字证书) 计算机网络相关知识体系详解 网络知识详解之:TCP连接原理详解 网络知识详解之:HTTP协议基础 网络知识详解之:HTT ...

  9. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

最新文章

  1. a[0]和a 的区别?
  2. web网站无法启动报错
  3. python不小心用关键字做了变量名,怎么改回来
  4. 栈(stack)和堆(heap)
  5. MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM)
  6. ARM Cortex-M3相比于ARM其他系列微控制器的优势和特点
  7. JavaScript笔记(3)
  8. 在计算机附近用英语怎么说,附近用英语怎么说
  9. fprintf 和 perror 的理解1
  10. java模拟数据库压测_Jmeter压测工具使用总结
  11. 如何查看正在使用端口号并利用任务管理器将其关闭
  12. vue动态请求到的多重数组循环遍历,取值问题,如果某个值存在则显示,不存在则不显示。...
  13. 一款好用的国产软件源代码缺陷分析平台 — CodeSense
  14. 自己动手做一个爬虫项目
  15. linux pap认证,linux – pppd“同行拒绝认证”
  16. contrastive loss 详解
  17. 【PAT】A1107 Social Clusters (30分)
  18. C语言人五英尺七英寸,5尺7寸(5尺7寸是多高美国)
  19. linux做pptpd服务,PPTPD搭建
  20. 传奇开服方法教程:传奇开服在哪些网站打广告?传奇发布站打广告技巧

热门文章

  1. 计算机网络面试——HTTP篇
  2. 博图region用法_TIA博途软件-STEP 编程指南
  3. html-JS延迟加载方式
  4. 知到网课个人理财(西安欧亚学院)考试试题(含答案)
  5. aps计划排程的生产工艺模型
  6. AirPlay经常投屏失败,安卓投屏逐渐超越ios?
  7. qq浏览器打开word 技术原理_实操:QQ群排名技术原理
  8. C语言栈的运用:后缀表达式(逆波兰表达式)计算器
  9. 奥迪 a4 编码 控制计算机,大众/奥迪车电脑编码大全).doc
  10. Linux嵌入式开发——shell命令