java面向对象的思想(java三大特性)
用通俗易懂的语言来理解java面向对象的思想
大家都知道,java是面向对象的编程,掌握面向对象的编程思想是掌握java编程语言的核心,但是很多人在面向对象方面都存在或多或少的误区,有的是刚学完C语言,受面向过程思想干扰,在刚刚接触java的时候措手不及,感觉无从下手,我想通过自己对java的学习,用通俗易懂的语言,来谈谈自己对面向对象的理解,希望可以帮助大家来理解面向对象的编程思想。
理解面向对象的编程的思想,首先我想给大家一个非常熟悉的一个例子,让大家对面向对象和面向过程有一个大致的理解,想必大家都知道那个“老张开车去东北”的例子,用面向过程的思路理解:你首先得造一个车,然后包括挂档,每一步都得自己一步一步的线性去完成;用面向对象的思路来理解的话,直接调个车,找个司机,然后告诉他去东北,然后其他的就不用你管了;你可能隐约的感觉到,面向对象的思路似乎省了不少事。
理解面向对象的思想,首先我们需要知道在理解面向对象时需要知道的几个名词:对象,类,还有类中一些成员变量和成员方法,下面我们一一来进行分析:
对象:
对象是人们要进行研究的任何事物,从简单的一个小分子到复杂的汽车飞机都可以看做对象,只是有时对象要根据人们研究问题的需要来确定,对象不一定是具体的,有时也可以表示抽象的规则或计划。
类:
类在java中是具有相同或相似性质的对象的抽象体现形式。也就是说,类的实例化就是创建对象的过程类的实例就是对象。
其实类的创建在一定程度上是符合人的思维的,我想借一个例子来说明这个问题,同时熟悉一下类的大致结构:
我们创建一个People类:
- package com.guang.email;
- public class People {
- private String head;
- private String arms;
- private String legs;
- public People() {
- }
- public void hit(){
- System.out.println("hit you");
- }
- public void eat(){
- System.out.println("我要吃饭");
- }
- }
package com.guang.email; public class People {
private String head;
private String arms;
private String legs; public People() { } public void hit(){
System.out.println("hit you");
}
public void eat(){
System.out.println("我要吃饭");
} }
首先我们看一下类结构,有成员变量,成员方法,还有构造方法,对于结构这里就不多讲了,有很多同学不明白构造方法是干什么的,其实,构造方法是在实例化对象时执行的方法,一个类可以有很多构造方法,根据你创建对象时参数的不同来调用不同的构造方法,这就是所说的重载。
对于People类我们就叫他人类吧,你说人类是个什么,你可以摸的着吗,其实他就是一个定义,一个抽象的东西,但是当我们在对他实例化时,你就可以知道他是一个具体存在的东西:例如:
- People jim = new People();
- jim.hit();
- jim.eat();
People jim = new People();
jim.hit();
jim.eat();
我们实例化出了jim这个人的对象,是真实存在的,具体的,有头,有胳膊,还有腿等,并且他还可以打人,吃饭。
其实面向对象并不难,很接近我们现实生活的,就是通过我们对自然界的认知,经过一点点的转变,就转换到编程语言上来了,也就是说,你用自然的思维去理解考虑问题就可以了,但是刚开始我们会不习惯,就像Thinking
in java
里写的那样:“我们可能会被这种简单性所难倒”你需要一段时间去习惯,开始的时候可以先模仿,写的多了可能慢慢就会体会到面向对象的奥妙。
理解了上面对面向对象的一些基础的东西以后,我们来看面向对象的三个特性:封装、继承、多态。看似简单的六个字,却是面向对象的核心,下面我们一起来看看这三个特性:
封装:
面向对象最基础的一个特性,封装性,封装是根据需要,把代码和指令代码捆在一起,就像一个保护器,防止外界代码随意的访问,而是根据该保护器定义的接口来控制,封装的好处是根据问题的需要,封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,也不用担心其他的一些副作用。
在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例。
在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义。
由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情。
继承
继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,黑种人是人的一种,美国人有时白种人的一种,.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的
各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。
继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用。
多态
多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用。多态使得对象间交互更为灵活。
封装,继承,多态的组合使用 :
在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序
总的来说,所谓封装,就是通过定义类并且给类的属性和方法加上访问控制来抽象事物的本质特性。所谓继承,就是代码重用,而多态,从另外一个角度分割了接口和实现。
理解了之后这些之后,想必你对面向对象会有一个新的认识,那么,接下来,可以找个小的程序题,或者生活中的某个应用,来自己设计并实现它吧。
编程来源于生活,又回归与生活。
java面向对象的思想(java三大特性)的更多相关文章
- Java面向对象设计主要有三大特征:封装性、继承性和多态性
Java面向对象设计主要有三大特征:封装性.继承性和多态性 一 封装性 1.1 概念:它是将类的一些敏感信息隐藏在类的类部,不让外界直接访问到,但是可以通过getter/setter方法间接访 ...
- Java面向基础概述和三大特性
Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心.围绕着 Java 类和 Java 对象,有三大基本特性:封装是 Java 类的编写规范.继承是类与类之间联系的一种形式.而多态 ...
- Java面向对象OOP思想概述
目录 OOP思想(Object Oriented Programming) 类和对象 接口 抽象类 OOP三大特性 封装 继承 多态 OOP复用的形式 OOP思想(Object Oriented Pr ...
- Java面向对象的思想
面向对象的思想 1.面向对象的思想的特点: ①符合人们的日常思考习惯 ②能将复杂的问题简单化 ③将原来的执行者变为了现在的指挥者 面向对象的思想,所谓的对象,其实就是实体.对于实物的描述,通常有两个方 ...
- JAVA多线程-内存模型、三大特性、线程池
一.线程的三大特性 原子性.可见性.有序性 1)原子性,即一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行.原子性其实就是保证数据一致.线程安全一部分. 2)可见性,即 ...
- 用java面向对象的思想实现的汉诺塔问题
package hanoi.com; public class Disc { private String name; private int level; public Disc(){ name = ...
- java面向对象下:Java数据库编程
19.Java数据库编程: JDBC概述: JDBC(Java Database Connection)是java中提供的一套数据库编程API,它定义了一套用来访问数据库的标准Java类 ...
- java面向对象编程思想的理解
1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...
- 问渠那得清如许?为有源头活水来。——java面向对象的思想
20169205 2016-2017-2 <移动平台应用开发实践>第2周学习总结 教材学习内容总结 本次作业要求的部分主要是Java高级语言实现面向对象编程的基本方法,其中所介绍的面向对象 ...
随机推荐
- uniapp如何将微信小程序API封装为Promise
var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/; var CALL ...
- 脚手架方式搭建vue项目
一.首先基于node环境,我想应该每一个前端开发者都应该懂的吧,这里安装运行什么的就不多说了. 搭建成功之后在文件夹的任何(如果是全局的话)一个位置都能按住shift键同时鼠标右键在工具框中就会出来一 ...
- 安卓APP性能测试的一些方面
1. 启动速度 2. 点击/滑动等事件响应速度 3. 下载速度 4. 界面流畅程度,比较帧率 5. 耗电量测试 6. 流量测试 7. 内存泄漏 8. CPU 9. Monkey adb -s FJH5 ...
- 2019OO第一单元作业总结
OO第一单元作业的主题是求导,下面将分三次作业分别总结一下. --------------------------------------------------------------------- ...
- 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
AI早期成就,相对朴素形式化环境,不要求世界知识.如IBM深蓝(Deep Blue)国际象棋系统,1997,击败世界冠军Garry Kasparov(Hsu,2002).国际象棋,简单领域,64个位置 ...
- Visual Stdio2017 使用
1. 快捷键: https://www.cnblogs.com/happyzwt/p/7769129.html 2.
- collection和association的区别于关系
比如同时有User.java和Card.java两个类 User.java如下: public class User{ private Card card_one; private List<C ...
- 关于WeakEventManger的引用
在引用WeakEventManger时,代码里添加的命名空间是System.Windows,但项目引用的却是WindowsBase,真奇葩.
- PHP数组和XML相互转换的函数
//数组转xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "& ...
- (转)InnoDB与MyISAM引擎区别
MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比 2015年06月25日 21:58:42 阅读数:1827更多 个人分类: mysql 1.MyISAM:默认表类型,它是基于传统 ...