天天看点

黑马程序员----面向对象基本概念以及三大特性

1:面向对象(理解)

(1)面向对象:是基于面向过程的一种思想。

面向过程:以函数为基础,关注实现过程。

面向对象:以对象为基础,关注实现结果。

(2)面向对象的思想特点:

A:是一种更符合人们思考习惯的思想。

B:把复杂的事情简单化了。

C:把我们从执行者变成了指挥者。

(3)事物是如何体现的呢?

A:属性 有哪些特征

B:行为 有哪些功能

(4)类与对象的关系:(掌握)

将现实生活当中的事物描述类:

A:成员变量

定义在类中,方法外。

B:成员方法

类:是相关的属性和行为的集合。是一个抽象的概念。

对象:是某种事物的具体存在,具体的表现形式。

成员变量与成员属性的差别

成员变量:

成员变量定义在类中,在整个类中都可以被访问。

成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

成员变量有默认初始化值。

局部变量:

局部变量只定义在局部范围内,如:函数内,语句内等。

局部变量存在于栈内存中。

作用的范围结束,变量空间会自动释放。

局部变量没有默认初始化值。

变量的访问顺序:就近原则

先找局部变量

再找成员变量

再找父亲的成员变量

再找爷爷的成员变量

一直找到祖宗(Object)的成员变量

如果在Object当中也没找到,则报错!

2、面向对象的三大特性就是封装,继承和多态

2.1封装是指隐藏实现的细节,提供公共的访问方式。

但不是只有被private修饰了的才叫封装。类,方法等其实都是封装的具体体现。

2.2private关键字

A:用于修饰成员变量和成员方法。

B:被修饰的内容在其他类中是不可以被访问的。

2.3常见的应用:

类中的所有成员变量私有,给出对应的get/set方法。

3:继承

3.1把多个类中的相同的属性和行为进行抽取,封装到一个类中,

  然后再建立新类的时候,不需要从头做起,继承刚才定义的那个类即可。

3.2好处:

A:提高代码的复用性。

B:让类与类之间产生了一个关系,是多态的前提。

3.3什么时候使用继承?

A:如果类之间存在着:

is a 的关系,就可以考虑使用继承。

B:不要为了继承部分功能,而去使用继承。

3.4继承的特点:

A:Java只支持单继承,不支持多继承。

为什么?如果支持多继承,就会有调用不明确的问题。

B:Java支持多层(重)继承。

3.5super和this的区别?

A:super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)

B:它和this的用法相似

a:成员变量

this.变量 -- 本类的

super.变量 -- 父类的

b:构造方法

this(...) -- 本类的

super(...) -- 父类的

c:成员方法

this.方法名() -- 本类的

super.方法名() -- 父类的

3.6子父类中成员变量的用法:

A:名称不同,这个太简单了。

B:名称相同,子类对象的在使用的时候:

先找子类局部范围

再找子类成员范围

最后找父类成员范围

父类的父类成员范围

3.7子父类中成员方法的用法:

A:名称不同,这个太简单了。

B:名称相同,子类对象的在使用的时候:

先找子类的

再找父类的

C:方法重写

在子类中,方法声明(修饰符,返回值,方法名,参数列表)相同的情况。

注意事项:

a:父类中私有方法是不能被重写

b:子类方法的访问权限一定要大于等于父类的访问权限

c:静态只能重写静态。(这个不能算,因为静态跟类相关)

d:

  基本数据类型+void   子类与父类返回值类型必须相同

  引用数据类型   子类重写方法的返回值类型必须为父类这个方法的返回值类型的子类

3.8子父类中构造方法的用法:

A:子类的初始化过程中,首先回去执行父类的初始化动作。

  因为子类的构造方法中默认有一个super()。

为什么?子类要使用父类的成员变量,这个初始化,必须在子类初始化之前完成。

所以,子类的初始化过程中,会先执行父类的初始化。

B:如果父类没有无参构造方法

A:使用super调用父类的带参构造。推荐方式。

B:使用this调用本身的其他构造。

4:多态

4.1同一个对象在不同时刻表现出来的不同状态。

另外的表达方式:针对同一个对象,编译期类型和运行期类型不一致。

举例:

狗(狗是狗,狗是动物)

水(水,水蒸气,冰)

4.2前提:

A:有继承或者实现关系。

B:有方法重写。

C:有父类或者父接口引用指向子类对象。

4.3好处和弊端:

A:好处

扩展性和维护性(是由继承保证)。

B:弊端

不能使用子类的特有功能。

4.4向上转型和向下转型

A:向上转型

把子类对象赋值给父类或者父接口引用

B:向下转型

把父类或者父接口引用强制转换为子类

4.5多态中的使用成员特点

A:成员变量

编译运行都看左边

B:成员方法

编译看左边,运行看右边。

4.6多态的体现形式

A:具体类多态(几乎不用)

B:抽象类多态

C:接口多态