面向对象
面向对象思想
面向对象是基于面向过程的编程思想
面向过程强调每一个功能的步骤
面向对象强调的是对象,有对象去调用功能
特点
是一种更符合我们思考习惯的思想
可以将复杂的问题简单化
将我们从执行者变成了指挥者
面向对象和面向过程是相对而言的
总结
面向过程:每一步都需要亲历亲为,每一步都需要考虑清楚,程序员是一个执行者。
面向对象:找专业的对象去做业务流程,不考虑具体的实现细节,程序员角色由执行者变成了领 导者。专业人干专业的事。
类与对象及其使用
类与对象的关系
类是一组相关的属性和行为的集合。
对象是类的实例化。
类的定义
成员变量(属性):类中方法外
成员方法(行为):和定义方法一样,不加static
对象的创建和使用
创建:类名 对象名 = new 类名( );
使用:对象名.成员变量 或 对象名.成员方法
成员变量和局部变量的区别
在类中的位置不同
成员变量:类中方法外
局部变量:方法中或方法声明上(形参)
在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
生命周期不同
成员变量:随着对象的创建而创建,随着对象的消失而消失
局部变量:随着初始化而创建,随着所在的 } 结束而结束
初始化值不同
成员变量:有默认值
局部变量:无默认值,必须初始化
构造方法(构造函数、构造器)
作用
给对象进行初始化
格式
权限修饰符 构造方法名(参数列表){ }
构造方法名必须和本类名相同
没有返回值类型,连void都没有
注意事项
如果没有提供构造方法,系统会默认提供一个无参构造方法。
如果提供了构造方法,系统将不再提供。
构造方法也可以重载。
构造方法虽然没有返回值,但也可以使用return。
封装
private关键字是一个权限修饰符。
可以修饰成员变量和成员方法。
被private修饰的成员只能在本类中访问到,一般提供对应的公共的get/set方法
封装的概念和好处
概念:封装是面向对象三大特征之一。是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
原则上将不需要对外暴漏的内容都隐藏起来。
好处: 通过方法来控制成员变量的操作,提高了代码的安全性。
把代码用方法进行封装,提高了代码的复用性。
this关键字
this关键字的由来
this代表所在类的对象的引用
方法被哪个对象调用,this就指代哪个对象。
this关键字的使用
this.属性名称:代表当前类的成员变量,一般用于解决重名问题。
this.方法名( ):this调用成员方法。
this( ):调用本类的构造方法,必须写在第一行。
构造代码块和局部代码块
构造代码块在创建对象时无论调用哪个构造方法都会先于构造方法执行
类中方法外
{ }
如果所有的构造方法中都包含某段代码,可以提取到构造代码块中。
局部代码块:在方法中用{ }包起来的代码
作用:限制变量的作用范围和生命周期
提高栈内存的利用率
匿名对象
普通创建方式:Person p = new Person( );
匿名方式:new Person( );
直接使用,没有变量名
一般只能使用一次
可以作为方法接受的参数、方法返回值使用
权限修饰符
本类中 | 子类中 | 同包类中 | 其他类中 | |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
默认(default) | 可以 | 同包子类可以 | 可以 | 不可以 |
private | 可以 | 不可以 | 不可以 | 不可以 |
继承
如果一些类中的属性和方法是重复的,可以将这些重复的属性和方法提取到一个新的类中,利用extends关键字让原来的类和新的类产生联系。这种联系称之为继承。提取出来的新的类是父类(超类/基类),原来的类是子类(派生类)。子类通过继承父类可以使用父类中的一部分方法和属性。
注意:子类通过继承可以继承父类的所有的属性和方法。但是只有一部分属性和方法对子类可见。
优势:提高代码的复用性
java中继承:java中有多层继承,没有多继承
多继承在代码的复用性上要优于单继承,但是多继承在调用方法的时候会产生歧义