1、面向对象

面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm)。其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统。而且在系统构造中尽可能运用人类的自然思维方式。

什么是OOP?

OOP,即是面象对象的编程,是与结构化编程相对的编程方式。不了解结构化编程也无碍。简单地看下周遭的世界,你就能找到点OOP的特质。

比如:一辆汽车,有轮子、发动机等基本设备,能够行驶的基本功能。作为使用者。我们无需知道汽车的详细构造细节,仅仅要知道怎样操作方向盘,让汽车行驶就能够了。

也即是,要达到目标,我们仅仅要获得某一物体,知道怎样使用他就能够,无须关注详细的实现细节。

再比方,要组装一辆汽车。须要非常多非常多的零件,而这些零件呢,都具有一定的规格。能完毕某一详细的功能。

比方发动机产生动力,刹车片用来制动等等。各个零件相互组合来完毕更大的目标,这些零件就是要研究的详细的单元。

上面的样例中,汽车是我们要达到旅行目的所须要使用的单元,发动机、刹车片等是我们要组装一辆汽车须要的单元。在使用过程中,我们仅仅关注单元的规格、单元的能力,而不关心单元详细的运作细节。这些单元。在编程世界里,就能够抽象为类,即有一定属性、一定行为的类。

2、对象

  对象是系统中用来描写叙述客观事物的一个实体,它是构成系统的一个基本单位。

一个对象由一组属性和对这组属性进行操作的一组服务组成。

  类的实例化可生成对象。一个对象的生命周期包含三个阶段:生成、使用、消除。

  当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自己主动扫描对象的动态内存区。把没有引用的对象作为垃圾收集起来并释放。

当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步执行。

3、类

  类是具有同样属性和方法的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描写叙述,其内部包含属性和方法两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包含属性和方法两个主要部分。

 Java中的类实现包含两个部分:类声明和类体。

  类声明

  1. <span style="font-size:18px;"> [public][abstract|final]class className [extends superclassName] [implements interfaceNameList]{……}
  2.   当中。修饰符public,abstract,final 说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。
  3.  
  4.   类体
  5. classclassName{
  6. [public | protected | private ] [static][final] [transient] [volatile] type variableName;//成员变量
  7. [public | protected | private ] [static][final | abstract] [native] [synchronized] returnType methodName([paramList])[throws exceptionList]{
  8. statements
  9. }//成员方法
  10. }</span>

  成员变量限定词的含义:

static:静态变量(类变量)

final:常量。transient:临时性变量,用于对象存档,用于对象的串行化

volatile:贡献变量,用于并发线程的共享

方法的实现也包含两部分内容:方法声明和方法体。

方法声明

  方法声明中的限定词的含义:

static:类方法,可通过类名直接调用

abstract:抽象方法,没有方法体

final:方法不能被重写

native:集成其他语言的代码

synchronized:控制多个并发线程的訪问

  方法声明包含方法名、返回类型和外部參数。

当中參数的类型能够是简单数据类型,也能够是复合数据类型(又称引用数据类型)。

  对于简单数据类型来说,java实现的是值传递。方法接收參数的值,但不能改变这些參数的值。假设要改变參数的值,则用引用数据类型,由于引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作能够改变数据的值。

  方法体

  方法体是对方法的实现,它包含局部变量的声明以及全部合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。

  为了差别參数和类的成员变量,我们必须使用this。

this用在一个方法中引用当前对象。它的值是调用该方法的对象。

返回值须与返回类型一致,或者全然同样,或是其子类。当返回类型是接口时,返回值必须实现该接口。

  构造方法

构造方法是一个特殊的方法。

Java 中的每一个类都有构造方法,用来初始化该类的一个对象。

构造方法具有和类名同样的名称,并且不返回不论什么数据类型。

重载经经常使用于构造方法。

构造方法仅仅能由new运算符调用

4、面向对象的基本特性

封装

  封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,仅仅保留有限的接口和方法与外界进行交互。

封装的原则是使对象以外的部分不能任意的訪问和操作对象的内部属性。从而避免了外界对对象内部属性的破坏。

  能够通过对类的成员设置一定的訪问权限,实现类中成员的信息隐藏

private:类中限定为private的成员,仅仅能被这个类本身訪问。

假设一个类的构造方法声明为private,则其他类不能生成该类的一个实例。

default:类中不加不论什么訪问权限限定的成员属于缺省的(default)訪问状态,能够被这个类本身和同一个包中的类所訪问。

protected:类中限定为protected的成员。能够被这个类本身、它的子类(包含同一个包中以及不同包中的子类)和同一个包中的全部其它的类訪问。

public:类中限定为public的成员,能够被全部的类訪问。

继承

  子类的对象拥有父类的所有属性与方法。称作子类对父类的继承。

Java中父类能够拥有多个子类,可是子类仅仅能继承一个父类。称为单继承。继承实现了代码的复用。

Java中全部的类都是通过直接或间接地继承java.lang.Object类得到的。

子类不能继承父类中訪问权限为private的成员变量和方法。

子类能够重写父类的方法。即命名与父类同名的成员变量。

  Java中通过super来实现对父类成员的訪问。super用来引用当前对象的父类。super 的使用有三种情况:

訪问父类被隐藏的成员变量,如:super.variable;

调用父类中被重写的方法,如:super.Method([paramlist]),super()调用父类构造方法;

调用父类的构造函数,如:super([paramlist]);

多态

对象的多态性是指在父类中定义的属性或方法被子类继承之后,能够具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。比如:"几何图形"的"画图"方法,"椭圆"和"多边形"都是"几何图"的子类,其"画图"方法功能不同。

  Java的多态性体如今两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(执行时多态)。

编译时多态:在编译阶段,详细调用哪个被重载的方法,编译器会依据參数的不同来静态确定调用对应的方法。

执行时多态:因为子类继承了父类全部的属性(私有的除外),所以子类对象能够作为父类对象使用。程序中凡是使用父类对象的地方,都能够用子类对象来取代。一个对象能够通过引用子类的实例来调用子类的方法。

  重载(Overloading)

方法重载是让类以统一的方式处理不同数据类型的手段。

一个类中能够创建多个方法,它们具有同样的名字,但具有不同的參数和不同的定义。调用方法时通过传递给它们的不同參数个数和參数类型来决定详细使用哪个方法。

返回值类型能够同样也能够不同样。无法以返回型别作为重载函数的区分标准。

  重写(Overriding)

子类对父类的方法进行又一次编写。假设在子类中的方法与其父类有同样的的方法名、返回类型和參数表,我们说该方法被重写 (Overriding)。

如需父类中原有的方法,可使用superkeyword,该keyword引用了当前类的父类。

子类函数的訪问修饰权限不能低于父类的。

  1. publicclass Human{ // Human即是类的名字
  2. String name;// 这是定义属性
  3.  
  4. // 这是定义行为
  5. public void speack(String words){
  6. System.out.println(words);
  7. }
  8.  
  9. }

  1. <span style="font-size:18px;">HumanzhangSan = new Human(); </span>

这样就创建了 zhangSan这个人了。

HumanzhangSan 的写法类似 int i 。着重解说后面new Human()

类与构造方法

在由类实例化一个详细的对象的时候,构造方法就会运行。

比方Human这个类,定义了2个构造方法。一个无參数,一个有參数。看清构造方法的形式---无返回值。

  1. <span style="font-size:18px;">publicclass Human{
  2.  
  3. Stringid; // 这是标识对象唯一性的属性
  4. Stringname;
  5.  
  6. // 这是new Human()时调用的构造方法
  7. Human(){
  8. }
  9.  
  10. // 这是 newHuman("111111111")时调用的构造方法
  11. Human(StringshenFenZheng){
  12. id= shenFenZheng;
  13. }
  14.  
  15. } </span>

newHuman() 即调用无參数的构造方法创建一个 Human实例对象。

类的方法

方法是一个类行为的支撑,类全部的方法定义了这个类的能力范围,详细的实现过程则写在方法的内容中。方法的定义遵循一定的格式,即:

修饰符   返回值类型   方法名称(參数类型     參数名)

  1. <span style="font-size:18px;">publicvoid speack(String words) </span>

这个样例中:

修饰符:public (这个繁琐以后讲)

返回值:void (空,即不返回值)

方法名称:speak

參数类型:String ( 字符串类型 )

參数名称: words(这是在 方法内部该变量的名称)

类的属性与存取方法

作为OOP原则之中的一个:数据隐藏(或称为封装)。对象的属性不能直接被外部对象訪问,而应该通过对象自身提供的get(取)、set(存)方法来完毕。

  1. <span style="font-size:18px;">publicString getName() {
  2. return name;
  3. }
  4.  
  5. publicvoid setName(String aName) {
  6. name = aName; // 这里的name是类中的属性,该类的全部方法都能够直接訪问、赋值
  7. } </span>

一个较为合理的类

至此,一个类的片段我们都有了,以下拼接起来吧:

  1. <span style="font-size:18px;">publicclass Human {
  2. String id; // 类的属性变量
  3. String name; // 类的属性变量
  4. // 这是new Human()时调用的构造方法
  5. Human() {
  6. }
  7.  
  8. // 这是 new Human("111111111")时调用的构造方法
  9. Human(String shenFenZheng) {
  10. id = shenFenZheng;
  11. }
  12.  
  13. public String getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(String shenFenZheng){
  18. id = shenFenZheng;
  19. }
  20.  
  21. // 取name内容的方法
  22. public String getName() {
  23. return name;
  24. }
  25.  
  26. // 改动name内容的方法
  27. public void setName(String aName) {
  28. name = aName;
  29. }
  30.  
  31. // 类的行为
  32. public void speak(String words) {
  33. System.out.println(words);
  34. }
  35. }
  36.  
  37. 使用实例:
  38. publicclass Meeting {
  39.  
  40. public static void main(String[] args){
  41.  
  42. // 一个小娃出生了
  43. Human zhangSan = new Human();
  44. // 报了户口,身份证号是
  45. zhangSan.setId("1234567890123");
  46. // 家长给起了个名字
  47. zhangSan.setName("张三");
  48.  
  49. // 又一个小娃出生了
  50. Human xiaoMing = new Human();
  51. xiaoMing.setId("3210987654321");
  52. xiaoMing.setName("小明");
  53.  
  54. // 两人见面了,张三先打招呼
  55. zhangSan.speak("你好!我是"+zhangSan.getName());
  56. // 出于礼貌,小明回了句
  57. xiaoMing.speak("你好!
  58.  
  59. 我是"+xiaoMing.getName()+",非常高兴认识你");
  60.  
  61. }
  62.  
  63. }
  64. </span>

一:Java之面向对象基本概念的更多相关文章

  1. (Java)《head first java》值得Java或面向对象基础的新手看。

    看完这本书后本人收获良多. 内容对Java以及面向对象的入门者非常友好. 抽象的内容惯用图解的方法来剖析,通俗易懂 之前看C#入门经典的面向对象时,依然浓浓的一头雾水. (1)很不解为何实例化要写成A ...

  2. Java之面向对象相关问题集

    面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解所有问题,而仅仅是选择当中的一部分,临时不用部分细节. 抽 ...

  3. Java与面向对象

    一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应 ...

  4. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  5. JAVA入门 面向对象

    主要内容 1.类和对象的概念 2.什么是面向对象 3.什么对象的属性方法 4.何谓对象引用 5.实例化 类和对象的概念 万物皆对象,客观存在的事物皆为对象.我们大到名胜古迹,小道生活中的一件物品,例如 ...

  6. JAVA_SE基础——22.面向对象的概念

    我写博客是为了提升自己和为了进入黑马程序员学习,还有分享些自己的心得给大家,希望能帮助大家学习JAVA. 我是自学的,如果写的有错误或者能更好的修改的请提出. 在这里我先引用下<think in ...

  7. java学习--面向对象

    对象及类的概念 对象是java程序的核心,在java程序中“万事万物皆对象” 对象可以看成是属性和方法的封装体 类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的属性和方法 J2SD ...

  8. Java的面向对象(初涉)

    Java的面向对象(初涉) 面向对象的分析根据抽象关键的问题域来分解系统.面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成"现实世界&qu ...

  9. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

随机推荐

  1. jquery 用于操作动态元素的delegate/on方法

    delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素). 在做项目中有很多由ajax动态生成的html标签,jquery对这些标签不会响应\((selector).c ...

  2. h5性能优化,细节决定结果。

    介绍一些最近整理的优化细节.图片压缩什么的就不说了,这是优化必须做的.今天就说一下大家写代码时可以培养的优化的细节点. 不滥用float.不滥用web字体. Float在渲染时计算量比较大,并且会脱标 ...

  3. jpa自定义条件分页查询

    主要依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  4. MVC总结

    一.转自https://zhuanlan.zhihu.com/p/35680070 MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来, ...

  5. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  6. HDU 4335 Contest 4

    利用降幂公式..呃,还是自己去搜题解吧.知道降幂公式后,就不难了. #include <iostream> #include <cstdio> #include <alg ...

  7. poj 2612 Mine Sweeper

    Mine Sweeper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6429   Accepted: 2500 Desc ...

  8. h5缓存之数据库

    /*======================================================= 函数功能:保存日志到本地数据库 ========================== ...

  9. ElasticSearch Shard——本质上是做分布式扩展,副本对于集群的稳定性有很强的影响

    什么是一个Shard? Shard就是一个Lucene Index,参照文章(深入理解Shard和Lucene Index). Index需要多少个Shard? 回答这个问题,我们需要先谈谈节点,一个 ...

  10. NYOJ 16 矩形嵌套【DP】

    解题思路:呃,是看的紫书上面的做法,一个矩形和另一个矩形之间的关系就只有两种,(因为它自己是不能嵌套自己的),可嵌套,不可嵌套,是一个二元关系,如果可嵌套的话,则记为1,如果不可嵌套的话则记为0,就可 ...