java 入门(6)--面向对象初探

类与对象

面向对象的想法是模拟现实世界。

把某样东西的状态数据和它的行为封装起来,从而达到易用、重用、隐藏内部状态的目的。

一般的变量,如: int a, double b 等,

我们定义它之后,它就是一个被动的数据,等特着其它代码来操作它。

而对象,不仅含有数据,还有在数据上操作的方法,这样,数据本身就可能隐藏起来了。

外界只需要调用对象的方法来达到操控对象的目的。

这对外界而言,增加了易用性,因为这些专门针对该对象的方法,进行了精心设计,可以避免复杂度,避免一些误用。

对对象而言,因为不直接操作它的数据,就达到了保护内部数据的目的,增加了安全性。

这样看来,相比于普通的变量,对象就好比是更智能化的数据。

对象是一种复合类型,或说复杂类型。

因为对象中,可能会包含多个数据,以刻画对象当前所处的状态,又包含多个方法,描述对象可以做出的行为。

定义一个普通的数据, int a = 100; 就好了,这个类型很简单。

如果还需要第 2 个, int b = ... 也就搞定。

但如果直接定义一个对象,无论怎么设计语法,要给出多个数据,多个方法,都肯定会冗长。

刚写好,然后老板又要再定义 10 个这样的对象,那就要悲剧了。

为避免重复与冗长,一个很自然的想法,是先定义一自己的新“类型”,地位相当于 int,

在这个类型中,把对象应该包含的数据、方法一次性描述清楚。

然后用这个新的类型再去定义对象,不就很清晰自然了吗?

这个新类型,就是我们所说的----

如下代码定义了平面上的"点",它包含 x, y 坐标,还有方法,比如:到原点的距离, distance。

 1 class MyPoint
 2 {
 3     private double x;
 4     private double y;
 5
 6     public double distance(){
 7         return Math.sqrt(x * x + y * y);
 8     }
 9     public void set(double x1, double y1){
10         x = x1;
11         y = y1;
12     }
13     public double getx(){
14         return x;
15     }
16     public double gety(){
17         return y;
18     }
19 }

这段代码中对 MyPoint 的描述比较简陋,只有 2 个数据,3 个方法。

数据前边以 private修饰,表示外界不能直接存取这些数据,达到保护的目的。

但这样一来,总得给外界提供某种能够访问 x, y 的方式,否则这些数据就没什么价值了。

所以才有下面的 set, getx, gety 方法,它们负责对 x y 设定新值,以及读取 x y 的值。

下面看看怎样使用  MyPoint 这个新类型。

 1 public class A0411
 2 {
 3     public static void main(String[] args){
 4         MyPoint p1 = new MyPoint();
 5         p1.set(10,20);
 6         System.out.println(p1.distance());
 7         System.out.println(p1.getx());
 8         System.out.println(p1.gety());
 9     }
10 }

你可能会觉得,这么绕着弯去操作 x, y 到底有什么好处呢,看起来还不如直接定义 x, y 更舒服呢。

的确,面向对象在效率上确实有些陨失,但换来了安全性。当软件变大,变复杂后,安全性、隔离性就很重要了。

对这么个简单情况,当然看不出什么优势来。

如果一定要看优势,这样想吧,比如我们需要对 x y 的值进行限幅操作,x y 的值被限定在 -1000 到 1000 之间,

超出的,取范围内与设定最接近的值。

此时,我们只需要对 set 方法进行修改就可以了,不需要更动其它代码,尤其是不需要惊动使用 MyPoint 的代码,这是个很大的优势,

因为在大型项目中,MyPoint 和使用 MyPoint 的代码很可能是两个不同的人,甚至是两个不同的团队写出来的。

    public void set(double x1, double y1){
        if(x1 < -1000) x1 = -1000;
        if(x1 >  1000) x1 = 1000;
        if(y1 < -1000) y1 = -1000;
        if(y1 >  1000) y1 = 1000;
        x = x1;
        y = y1;
    }

这也正是“封装”的含义。

外界只能调用方法,提供必要的参数,而无权干涉对象内部如何处理。

更理论化地说,外界只能向对象发出请求,至于对象如何响应这个请求,外界无法左右。

外界: 求求你,快把你的坐标改为 1200,900 吧。

对象: 才不呢! 1200超范围了,我就设为 1000,900 吧,爱咋地咋地。

原文地址:https://www.cnblogs.com/gyhang/p/8794343.html

时间: 2024-11-09 10:40:27

java 入门(6)--面向对象初探的相关文章

Java 入门基础——面向对象的特征

计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程.面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中. 面向对象的编程语言有封装.继承 .抽象.多态等4个主要的特征. 封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的"高内聚.低耦合",防止程序相互依赖性而带来的变动影响.在面向

[Java入门笔记] 面向对象三大特征之:封装

了解封装 什么是封装? 在Java的面向对象程序设计中,有三大基本特征:封装.继承和多态.首先我们先来看看封装: 在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实作细节部份包装.隐藏起来的方法.封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随便访问.如果要访问类中的代码和数据,必须要通过严格的控制. 为什么要使用封装? 使用封装主要有以下好处: 能够隐藏该类中一些功能的实现细节.让调用者通过事先实现好的方法访问类的功能和数据,同时也限制

[Java入门笔记] 面向对象三大特征之:继承

理解什么是继承 首先我们知道,面对对象有三大特征: 封装:解决了数据的安全性问题 继承:解决了代码的重用问题 多态:解决了程序的扩展问题 上一篇博客中,我们了解了一下封装,现在我了再来看看什么是继承. 在现实生活中,我们可以把封装理解成儿子对父亲财产的继承.而在面向对象程序设计中的继承,是一个对象从另一个对象获取属性和方法的过程. 继承是利用现有的类创建新类的过程,现有的类称作基类(父类),创建的新类称为派生类(子类),派生类可以拥有所有基类的非私有的属性和方法. 例如,我们可以有一个类“人”,

[Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

在类中,变量根据定义的位置不同,可以分为成员变量和局部变量. 成员变量是在类体内,方法之外定义的变量,局部变量是在方法中定义的参数. 成员变量 成员变量分为类属性和实例属性,定义时没有static修饰的称为实例属性,有static修饰的称为类属性,类属性和实例属性的区别就是类属性是属于类的,它并不属于哪一个对象,它从这个类的准备阶段就一直存在,一直到这个类完全销毁.实例属性属于对象,只有某个对象被创建时,它才被创建,对象被回收,从属于该对象的实例属性也就被销毁了. 类属性的定义语法: [修饰符]

java入门经验分享——记面向对象先导课程学习感想

选择在暑期学习面向对象先导课程的初衷是为大二下学期面向对象课程做一些铺垫,接触入门java语言.在接触java的过程中,就编程语言的学习方法而言,我从刚入学时的手慌脚乱四处寻求帮助到现在慢慢养成了自己不断寻找困难解决方法的习惯,感觉自己的另一种自学能力--一种计算机工科的实践能力得到了培养,这种自学能力跟学习基础课程理论知识的感觉完全不同,这种需要在实践和动手中得到经验和知识的自学方法与以前理解现成抽象理论概念的自学方法可以说是完全不同了.作为一个偏好理论研究的理科女生,动手实践能力在此之前几乎

Java入门——面向对象基础(一)

Java入门——面向对象基础(一) 本博客目的 练习题(重要) 面向对象的概念(了解) 面向对象的三大特性(重要) 2016-09-10——13:13:39 ll练习题 用方法调用的形式进行数组排序 1 package Sep10; 2 //调用方法完成两个整形数组的排序并打印 3 public class ArrayRefDemo03 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // T

Java入门——面向对象基础

Java入门——面向对象 public class和class声明类的区别: public class生命时:文件名必须与类名相同 class声明时,文件名和类名可以不一致 一个文件中可以有多个class定义的类,但是只能由一个public class定义的类 标识符编写的建议 不要使用过多符号,最好用字母开头 可以有大小写字母,下划线,数字,$ 不能以数字开头 数据类型分为“基本数据类型”.“引用数据类型” 基本 整数类型 byte short int long 浮点类型 float doub

Java入门(七)之面向对象-划重点

目录 Java入门(七)之面向对象-划重点 0. 面向对象的概念 0.1 面向对象和面向过程 0.2 属性和方法 1. 面向对象的特征 1.1 对象唯一 1.2 抽象性 1.3 三大特性--继承.封装.多态 2. 继承相关 2.1 抽象类 2.2 接口 3. 多态相关 3.1 构造方法 课后习题 角色类 狮子类 农夫类 女儿类 故事讲述 Java入门(七)之面向对象-划重点 0. 面向对象的概念 0.1 面向对象和面向过程 面向对象是一种软件开发方法,这种方法可以将现实中的事物抽象出来,让我们的

Java入门——面向对象基础(三)

Java入门——抽象类与接口的应用 本Blog内容 为抽象类与接口实例化 抽象类的实际应用——模板设计 接口的实际应用——制定标准 设计模式——工厂设计 设计模式——代理设计 为抽象类与接口实例化 利用多态性 1 package Sep16; 2 3 public class AbstractCaseDemo1 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-gene

Java - Java入门(2-1am)

第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 如:10000000  加        10010000减          11110000 打印 3. 汇编语言:用助记符号描述的指令系统 如: Mov   A, #10; Mov   B, #20; Add   A,  B; 4. 高级语言: 面向过程的高级语言:程序设计的基本单元为函数