【JAVA SE】第六章 面向对象、对象和类以及封装
第六章 面向对象、对象和类以及封装
文章目录
- 第六章 面向对象、对象和类以及封装
- 一、面向对象
- 1.概念
- 2.面向对象的三大特征
- 二、对象和类
- 1.基本概念
- 2.Java中的对象
- 3.Java 中的类
- 4.创建对象
- 5.访问实例变量和方法
- 6.源文件声明规则
- 7.匿名类
- 8.内部类
- 四、封装
- 1.概念
- 2.封装的优点
- 3.实现Java封装的步骤
一、面向对象
1.概念
面向过程
面向过程是一种编程思想,意思是我们要做任何事,都需要亲力亲为,强调的是过程
比如,把大象装冰箱,一共分3步:
- 打开冰箱门
- 把大象放进去
- 关上冰箱门
面向对象
面向对象也是一种编程思想,相对于面向过程,我们可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化
把大象装进冰箱里,面向过程强调的是过程。而面向对象强调的是结果:
- 什么样的冰箱?
- 什么样的大象?
- 谁负责把大象装进去?
我们可以看到,干活的主体并不是自己,自己变成了一个指挥者
再比如,当我们想吃一道菜的时候,我们不用考虑这道菜是怎么做的,怎么送达的,只需要点菜即可。传菜和做菜都有具体的对象来完成具体的功能,我们不需要关注实现的过程,只需要关注结果就好
这就是我们所说的面向对象的编程思想(OOP,Object Oriented Programming)
2.面向对象的三大特征
- 封装:把相关的数据封装成一个”类”组件
- 继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
- 多态: 增强软件的灵活性和重用性
二、对象和类
1.基本概念
对象
对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等
类
类是一个模板,它描述一类对象的行为和状态
下图中汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等
2.Java中的对象
现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑
对比现实对象和软件对象,它们之间十分相似
软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现
在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成
3.Java 中的类
类可以看成是创建 Java 对象的模板
通过上图创建一个简单的类来理解下 Java 中类的定义:
public class Dog {String breed;int size;String colour;int age;void eat() {}void run() {}void sleep(){}void name(){}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法
4.创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型
- 实例化:使用关键字 new 来创建一个对象
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象
下面是一个创建对象的例子:
public class Puppy{public Puppy(String name){//这个构造器仅有一个参数:nameSystem.out.println("小狗的名字是 : " + name ); }public static void main(String[] args){// 下面的语句将创建一个Puppy对象Puppy myPuppy = new Puppy( "tommy" );}
}
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是 : tommy
创建对象时,内存经历了如下过程:
- 在栈内存中开辟一块空间,存放引用类型变量 p,并把 p 压入栈底
- 在堆内存中开辟一块空间,存放 Phone 对象
- 完成对象的初始化,并赋予默认值
- 给初始化完毕的对象赋予唯一的地址值
- 把地址值交给引用类型变量 p 来保存
5.访问实例变量和方法
通过已创建的对象来访问成员变量和成员方法,如下所示:
/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
6.源文件声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则:
- 一个源文件中只能有一个 public 类
- 一个源文件可以有多个非 public 类
- 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为Employee.java
- 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行
- 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面
- import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明
类有若干种访问级别,并且类也分不同的类型:抽象类和 final 类等
除了上面提到的几种类型,Java 还有一些特殊的类,如:内部类、匿名类
7.匿名类
Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
主要是用于在我们需要的时候创建一个对象来执行特定的任务,可以使代码更加简洁。
匿名类是不能有名字的类,它们不能被引用,只能在创建时用 new 语句来声明它们。
匿名类语法格式:
class outerClass {// 定义一个匿名类object1 = new Type(parameterList) {// 匿名类代码};
}
8.内部类
Java 一个类中可以嵌套另外一个类,语法格式如下:
class OuterClass { // 外部类// ...class NestedClass { // 嵌套类,或称为内部类// ...}
}
要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。
嵌套类有两种类型:
- 非静态内部类
- 静态内部类
一个非静态内部类的实例:
class OuterClass {int x = 10;class InnerClass {int y = 5;}
}public class MyMainClass {public static void main(String[] args) {OuterClass myOuter = new OuterClass();OuterClass.InnerClass myInner = myOuter.new InnerClass();System.out.println(myInner.y + myOuter.x);}
}
由于内部类嵌套在外部类中,因此必须首先实例化外部类,然后创建内部类的对象来实现
四、封装
1.概念
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
要访问该类的代码和数据,必须通过严格的接口控制
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性
2.封装的优点
- 良好的封装能够减少耦合
- 类内部的结构可以自由修改
- 可以对成员变量进行更精确的控制
- 隐藏信息,实现细节
3.实现Java封装的步骤
1)修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Person {private String name;private int age;
}
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2)对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{private String name;private int age;
public int getAge(){return age;}
public String getName(){return name;}
public void setAge(int age){this.age = age;}
public void setName(String name){this.name = name;}
}
采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突
【JAVA SE】第六章 面向对象、对象和类以及封装相关推荐
- 《疯狂Java讲义》学习笔记 第六章 面向对象(下)
<疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...
- Java基础学习——第六章 面向对象编程(下)
Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...
- 《编程机制探析》第六章 面向对象
<编程机制探析>第六章 面向对象 面向对象(Object Oriented)是命令式编程的主流编程模型,其概念极其重要.可以说,命令式编程几乎就是面向对象的天下. 面向对象(Object ...
- Java学习笔记 六、面向对象编程中级部分
Java学习笔记 六.面向对象编程中级部分 包 包的注意事项和使用细节 访问修饰符 访问修饰符的注意事项和使用细节 面向对象编程三大特征 封装 封装的实现步骤(三步) 继承 继承的细节问题 继承的本质 ...
- [深入理解Java虚拟机]第六章 Class类文件的结构
在本章关于Class文件结构的讲解中,我们将以<Java虚拟机规范(第2版 )> (1999年发布,对应于JDK 1.4时代的Java虚拟机)中的定义为主线,这部分内容虽然古老,但它所包含 ...
- Java SE第8章 Java集合
Java SE第8章 Java集合 1. 集合的概念和作用 2. 使用Lambad表达式遍历集合 3.Collection集合的常规用法 4. 使用Predicate操作集合 5.使用Iterator ...
- java基础(六章)
java基础(六章) 一.for循环的使用场合 l while循环--先判断,再循环 while(1.条件表达式){ //2.循环操作 //3.更改循环条件表达式 } l do ...
- 速学堂(java)第六章编程题自写答案
速学堂(java)第六章编程题自写答案 1. 编写程序接收用户输入分数信息,如果分数在0-100之间,输出成绩.如果成绩不在该范围内,抛出异常信息,提示分数必须在0-100之间. 要求:使用自定义异常 ...
- php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 原文:php函数.类和对象以及类的封装.继承.类的静态方法.静态属性 1.函数 php内置函数可以直接使用,如果没有安装php扩展即可 ...
最新文章
- 检查单 2014-06-20-01
- Python TeamViewer批量提交密码重置--分析与实现
- 项目开发经验谈之:项目到底谁说了算
- OUTLOOK 的PST文件和OST文件的区别
- 使用RedisTemplate实现Redis分布式锁出现的一些列问题(避坑)
- xwpython aui 子窗口-Python/wxPython:AUI管理器,防止面板离开Fram
- P1280 尼克的任务
- MEncoder的基础用法—6.6. 改变电影大小
- pycharm怎样运行python_python – 如何使用PyCharm运行doctests?
- $(...).nicescroll is not a function报错分析
- python | 降水数据分析(Ⅰ) 绘制全国降水四季分布图
- 因为毕业半年挣了100万,帅地在CSDN被喷上热榜
- Win10邮箱管理QQ邮箱+163邮箱
- 几何分布GeometricDistribution
- AutoCAD 2021绿色中文精简版
- 作业盒子小学版android,作业盒子小学生官方版
- 二层网络的未来?starkgate 带你体验二层桥接
- 浙大与北大计算机考研分数线,2017浙大考研复试分数线及相关问题
- 互联网直播平台架构案例一
- 进销存软件|云ERP仓库管理系统软件源码开源可扫码