前言
上篇文章总结了数组的知识点,而数组也可以说是一种对象,所以这篇承接上一篇文章来总结,对象和类的知识点。对象和类的知识也是java这个面向对象语言的重中之重,本篇文章参考了《java编程思想》,结合了自己的学习感悟和实践操作。同时笔记中也涉及了许多本篇相关的知识点,可供参考,文章链接
一、名词解释
多态
- 按字面的意思就是“多种状态”,指同一个实体同时具有多种形式,在面向对象中,接口的多种不同实现方式即为多态。
- 也可以称为是:编译时和运行时类型不一致的情况
继承
- 汉语释义:继承是指一个对象直接使用另一对象的属性和方法
- 编程语言中:继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等
封装
- 封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别
- 在《java编程思想》一书中作者的举例:
将开发人员得角色分为类创建者和客户端程序员,客户端程序员收集各种用来实现快速开发的类,类创建者构建这些类,这种类对外只暴露接口部分,隐藏实现部分,这样可以在实现客户端程序员能够访问的同时,保证了类创建者可以任意修改被隐藏的部分,并且这些隐藏部分容易被其他人篡改破坏导致bug,所以隐藏起来也可以减少程序的bug。
抽象
- 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
- 所有编程语言都提供抽象机制
- 问题的复杂性直接取决于抽象的类型和质量
类
- 也可以说是类型,指包含由各特殊的事物或现象抽出来的共通点的抽象概念,也就是说抽象出来的就是类型
- 因为类描述了具有相同特性(数据元素)和行为(功能)的对象集合,所以实际上一个类就是一个数据类型
- 为解决“银行出纳员问题”中涉及许多对象,面向对象语言Simula-67中使用class关键字来引入新的类型,相似的对象会被分组到对象的类中
- 类是一批对象的抽象
- 自定义的类来表示数据类型,这时候这种类型的变量被称为引用变量
对象
- 汉语释义:常有两层意思,指行动或思考时作为目标的事物或特指恋爱的对方等含义
- 撇开恋爱方面不谈
在《java编程思想》中:将问题空间中的元素以及其在解空间中的表示称为对象
- 简单说,我们将需要解决的问题本身的一些实体抽象为对象,比如电商网站,有商品、顾客、商家、订单等等对象
实例
- 汉语解释:实例,指实际存在的例子
- 在编程概念中实例和对象基本是同义词,每个对象都是某个类的一个实例,但并不能说所有的实例都是对象
方法
- 汉语解释:一般是指为获得某种东西或达到某种目的而采取的手段与行为方式
- 《java编程思想》中:
Booch对对象提出了一个简洁的描述:对象具有状态、行为和标识。也就是说对象可以拥有:内部数据(它们给出对象的状态)、方法(它们产生的行为)、都有唯一的地址(标识)
- 也就是说方法就是对象产生的行为
二、java中的对象
根据《java编程思想》一书中的总结:
- 万物皆为对象
字面意思,理论上讲任何待求解问题的概念化构件都可以表示成对象,比如:猫、狗、建筑物、服务等等
- 程序是对象的集合,通过消息来互相请求
字面意思,程序就是由许多对象构成,对象和对象之间通过消息联络,若要调用某个对象的方法就发送消息,即发送调用请求
- 每个对象都有自己的由其他对象所构成的存储
简单来说,就是可以创建包含现有对象的对象,新建的一个对象中可以包含现有对象,这样就可以构建复杂的程序体系,将复杂的体系隐藏在对象的简单性背后
- 每个对象都拥有类型
不用怀疑,这里类型就是类的同义词,每个对象都是某个类的实例,每个类都区别于其他的类,都有自己的特征
- 某一特定类型的所有对象都可以接收同样的消息
比如:动物类型的对象都会收到“吃”这一消息,狗类型的对象同时也是动物类型的,那么狗类型的对象也会收到“吃”的消息
简介描述:对象具有状态、行为和标识,意味着每个对象都拥有内部数据和方法,并有唯一的地址来区分
三、java中的类
实例
public class Dog {
int age;//狗的年龄
String color;//狗的颜色
String breed;//狗的品种
//吃的方法
public void eat(){
System.out.println("I can eat!");
}
//跑的方法
public void run(){
System.out.println("I can run!");
}
//叫的方法
public void bark(){
System.out.println("I can bark!");
}
}
上述例子,就是类构建的模板,在名词解释种已经对类的基本概念有所了解了。
java中的类的特征和行为根据抽象的不同有着不同的属性和方法。当然其属性和方法也可以有多个。
类与对象的关系
虽然根据上述的基本概念不难得出类和对象之间的关系,但是再次还是总结一下,方便查看:
- 类是创建对象的模板,描述一类对象的行为和状态
- 类是对象的抽象
- 对象是类的实例
四、构造方法
特点
- 每个类都有至少一个构造方法
- 若没有显示定义构造方法,编译器会为这个类提供一个默认的构造方法
- 创建对象一定会调用一个构造方法
- 构造方法必须和类同名
- 一个类可以有多个构造方法
示例
public class People {
int age;
String name;
public People() {
}
public People(int age) {
this.age = age;
}
public People(int age, String name) {
this.age = age;
this.name = name;
}
}
无参的,一个参数的,多个参数的。
若是默认情况下
.class文件中的反编译内容
public class People {
public People() {
}
public static void main(String[] args) {
}
}
会发现编译器会加上一个默认的无参构造函数
五、创建对象
java通过new关键字来创建对象,也就是类的实例化
People people = new People();
步骤拆分:
- new People()new关键字分配空间,并根据People类创建对象
- 调用构造函数初始化
- 然后将new People()创建出的对象的引用赋值给 people 这个变量
注意:这里对象的引用是new关键字的结果,不是构造方法的返回值
这里有个引用的概念,我们可以简单的理解引用就是存储的标志或者是地址,在内存空间中要寻找每个变量,寻找的方法就是通过每个内存的引用,类似C/C++中指针的概念
理解方法:
new People()是创建对象的语句,这里创建出来的对象在内存空间中有一个地址,这个地址就可以理解为引用,而这个对象虽然存在,但是我们要使用它却不好使用,我们需要一个变量来装这个引用,方便我们每次调用,所以将这个引用通过=赋值给前面同类型的变量。
类似每个对象都像是一个气球,而这些气球飘在天上我们够不着,所以我们通过给气球系上绳子,这样就可以够到这些气球了,绳子就是变量,系绳子就是将引用赋值给变量,那么气球就是带着这些引用的对象了。
参考书籍:
《java编程思想》
参考文章:
总结
本篇就算是告一段落,下一篇将接着本篇的类和对象的概念,来总结类中变量的类型中的知识点