java笔记之面向对象
一、面向过程与面向对象的区别
1 面向过程:主要关注点是:实现的具体过程,因果关系【集成显卡的开发思路】
* 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低。
* 缺点:采用面向过程的方式开发很难解决非常复杂的业务逻辑,另外面向过程的
方式导致软件元素之间的“耦合度”非常高,只要其中一环出问题,整个系统受到影响,
导致最终的软件“扩展力”差。另外,由于没有独立体的概念,所以无法达到组件复用。
2 面向对象:主要关注点是:主要关注对象【独立体】能完成哪些功能。【独立显卡的开发思路】
* 优点:耦合度低,扩展力强。更容易解决现实世界当中更复杂的业务逻辑。组件复用性强。
* 缺点:前期投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。
- C语言是纯面向过程的、C++半面向对象、Java纯面向对象
- 现在出现的一些新的编程语言多数都是面向对象的。人在认识现实世界的时候以面向对象的方式。
- 面向对象更符合人的思维方式。
二、一个类的简单组成
三、类和对象的概念
类:
- 类在现实世界当中是不存在的,是一个模板,是一个概念。是人类大脑思考抽象的结果。
- 类代表了一类事物。
- 在现实世界当中,对象A与对象B之间具有共同特征,进行抽象总结出一个模板,这个模板被称为类。
对象:
- 对象是实际存在的个体。现实世界当中实际存在
- 是类的具体总结
四、封装
4.1、概述:
封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
4.2、优点
1. 良好的封装能够减少耦合。
2. 类内部的结构可以自由修改。
3. 可以对成员变量进行更精确的控制。
4. 隐藏信息,实现细节
4.3、实现Java封装的步骤
1. 修改属性的可见性来限制对属性的访问(一般限制为private)
public class Cat { //修改属性的可见性--private限定只能在当前类访问 private String name; private int age; }
这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。
2. 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
public class Cat{ 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变量)之间发生的同名的冲突。
4.4 实例
/* 文件名: EncapTest.java */ /** @author 常春雨
*/ public class EncapTest{ private String name; private String idNum; private int age; public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }
测试类 /* F文件名 : RunEncap.java */ public class RunEncap{ public static void main(String args[]){ //创建对象 EncapTest encap = new EncapTest(); //通过set方法为私有属性赋值 encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); //输出打印 System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); } }
未完待续