java面向对象——类
一、类
类(class)是构造对象的模板或蓝图。由类构造(construct)对象的过程称为创建类的实例(instance)。
用 java 编写的所有代码都位于某个类的内部。标准的Java 库提供了几千个类,可以用于用户界面设计、日期、日历和l网络程序设计。尽管如此,还是需要在Java 程序中创建一些自己的类,以使描述应用程序所对应的问题域中的对象。
封装( encapsulation,有时称为数据隐藏) 是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域 (instance field),操纵数据的过程称为方法( method )。对于每个特定的类实例 ( 对象) 都有一组特定的实例域值。这些值的集合就是这个对象的当前状态( state )。无论何时,只要向对象发送一个消息。它的状态就有可能发生改变。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。程序仅通过对象的方法与对象数据进行交互。封装给对象赋予了 “黑盒” 特征,这是提高重用性和可靠性的关键。这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用同样的方法操作数据,其他对象就不会知道或介意所发生的变化。
OOP(面向对象程序设计) 的另一个原则会让用户自定义Java类变得轻而易举,这就是: 可以通过扩展一个类来建立另夕卜卟新的类。事实上, 在Java 中,所有的类都源自于一个 “神通广大的超类”它就是Object。
在扩展一个已有的类时,这个扩展后的新类具有所扩展的类的全部属性和方法。在新类中,只需提供适用于这个新类的新方法和数据域就可以了。通过扩展一个类来建立另外一个类的过程称为继承(iheritance),有关继承的详细内容请参看。
类的组成部分有:属性和方法
自定义类:
class Person{
private int age;
public String name;
public void show(){
System.out.println("我叫:" + name + ", " + age + "岁");
}
}
二、对象
要想使用OOP,一定要清楚对象的三个主要特性:
- 对象的行为(behavior) ——可以对对象施加哪些操作,或可以对对象施加哪些方法?
- 对象的状态(state) ——当施加那些方法时,对象如何响应?
- 对象标识(identity) ——如何辨别具有相同行为与状态的不同对象?
同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似牲。对象的行为是用可调用的方决定义的。
此外,每个对象都保存着描述当前特征的信息。这就是对象的状态。对象的状态可能会随着时间而发生改变,但这种改变不会是自发的。对象状态的改变必须通过调用方法实现( 如果不经过方法调用就可以改变对象状态,只能说明封装性遭到了破坏)。
但是,对象的状态并不能完全描述一个对象。每个对象都有一个唯一的身份(identily)。 例如,在一个订单处理系统中,任何两个订单都存在着不同之处,即使所订购的货物完全相同也是如此。需要注意,作为一个类的实例,每个对象的标识永远是不同的,状态常常也存在着差异。
对象的这些关键特性在彼此之间相互影响着。例如,对象的状态影响它的行为(如果一个订单 “已送货” 或 “已付款”,就应该拒绝调用具有增删订单中条目的方法,反过来,如果订单是 “空的” 即还没有加入预订的物品,这个订单就不应该进入“已送货”状态) 。
创建了一个 Person 类对象并调用了它的属性和方法。
public class Test{
public static void main(String [] args){
Person p = new Person();
p.show();
System.out.println(p.name);
}
}
三、类之间的关系
在类之间,最常见的关系有
- 依赖 ( "use-a”)
- 聚合 ("has-a")
- 继承 ( "is-a")
依赖 ( dependence),即 " use-a " 关系,是一种最明显的、最常见的关系。例如,订单类使用账户类是因为订单 对象需要访问账户对象查看信用状态。但是产品类不依赖于账户类,这是因为产品对象与客户账户无关。因此,如果一个类的方法操纵另一个类的对象,我们就说一个类依赖予另一个类。
应该尽可能地将相互依赖的类减至最少。如果类A 不知道B 的存在,它就不会关心B的任何改变 (这意味着B 的改变不会导致A 产生任何bug),用软件工程的术语来说, 就是让类之间的耦合度最小。
依赖具体表现:在代码层面,依赖关系表现为类B作为参数被类A在某个method 方法中使用
public class Person {
public void travel(Bus bus){
}
}
聚合(aggregation), 即 " has-a " 关系,是一种具体且易于理解的关系。例如,一个订单对象包含一些产品对象: 聚合关系意味着类A 的对象包含类B 的对象。
创建Student对象时Classes对象可以不创建,当Student 对象销毁时Classes不销毁
public class Classes{
}
public class Student{
private Classes cla;//班级
}
}
继承(inheritance),即 “is-a“ 关系,是一种用于表示特殊与一般关系的。
class Person{ }
public class Student extends Person{ }
实现关系,实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性。
表达类关系的UML符号
谈谈类之间的关联关系与依赖关系
http://blog.csdn.net/van38686061/article/details/52101140
java面向对象——类的更多相关文章
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- Java面向对象——类的成员
Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...
- Java面向对象--类和对象
面向对象是相对于面向过程而言的,是软件开发方法.面向对象把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统设计,更贴近事物的自然运行模式.本篇博客介绍Java面向对象的类和对象 目录: 面 ...
- Java面向对象——类,对象和方法
1.类的概念 在生活中,说到类,可以联想到类别,同类,会想到一类人,一类事物等等.而这一类人或事物都是具有相同特征或特点和行为的,我们根据不同的特征或特点和行为将他们归类或分类.同时,当我们认识一个新 ...
- Java面向对象类与对象整理
第一章 面向对象: 1.1 什么是面向过程: 遇到某件事的时候,思考 “我该怎么做”然后一步一步实现的过程 1.2 什么是面向对象: 遇到某件事的时 ...
- java 面向对象 — 类和对象
构造方法 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器 ...
- Java面向对象~类和对象&方法,类方法
面向对象 概念: 1.同一类事物的抽象描述,不是具体的 2.类和对象的关系: 类 是抽象的. 对象 是具体的. 3.对象的体征,称为"属性&q ...
- 2.java面向对象类与类/类与对象之间关系详解
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...
- java面向对象类的继承~ 匿名类 ;多态特性;强制类型转换
类的继承 创建子类语法: 修饰符 class 子类名 extends 父类名{ } 匿名子类语法: 直接实例化,过程中通过匿名类 继承父类,在实例化过程中将子类匿名 <父类 ...
随机推荐
- BinderPool — Andorid端的“服务发现治理工具”
导语 最近在学习微服务相关知识,突然想到:微服务的思想虽然是在server端的场景下提出来的,但是无论是server,还是移动端,思想是相通的,移动端也会有多服务的场景,就同样面临多服务需要整合治理的 ...
- Java学习笔记10(面向对象三:接口)
接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...
- JS ajaxfileUpload 一次性上传多个input控件 上传多个文件
本方法适用于一次性上传多个input框输入的文件,如下图所示,任务是需要一次上传两个input框提供的两个文件. 具体方法: 1.修改ajax调用方法 如上图所示,只需要将ajaxFileUpload ...
- HTML知识点总结之ul,ol,li标签
HTML列表分为有序列表,无序列表和描述列表.我们常用的是有序列表(ol)与无序列表(ul). 有序列表 <ol>标签就可以定义一个有序列表,之所以称其为有序列表,是因为可以使列表具有排序 ...
- 微信小程序——获取openid
1.在微信小程序后台得到appid.AppSecret 2.在任意小程序界面的[onLoad]中取得code(建议将代码写在index.js中) 3.用取得code换取openid 如后台无法将ope ...
- Flask框架
FLask框架的简单介绍 Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请 ...
- RNN的简单的推导演算公式(BPTT)
附上y=2x-b拟合的简单的代码. import numpy as np x = np.asarray([2,1,3,5,6]); y = np.zeros((1,5)); learning_rate ...
- Maven工程搭建spring boot+spring mvc+JPA
添加Spring boot支持,引入相关包: 1.maven工程,少不了pom.xml,spring boot的引入可参考官网: <parent> <groupId>org.s ...
- AC自动机讲解
今天花了半天肝下AC自动机,总算啃下一块硬骨头,熬夜把博客赶出来.. 正如许多博客所说,AC自动机看似很难很妙,而事实上不难,但的确很妙.笼统地说,AC自动机=Trie+KMP,但是仅仅知道这个并没有 ...
- CTF---Web入门第八题 Guess Next Session
Guess Next Session分值:10 来源: iFurySt 难度:易 参与人数:3870人 Get Flag:1672人 答题人数:1690人 解题通过率:99% 写个算法没准就算出来了, ...