面向对象(一)
---------------------- QQ:371524846 期待与您交流! ----------------------
一、面向对象和面向过程
面向对象:
面向对象是相对面向过程而言。所以说:面向对象是基于面向过程的。
面向对象和面向过程都是一种思想。
面对过程:
强调的是功能行为。
面向对象:
将功能封装进对象。
面向对象的三个特征:封装、继承、多态。
以后开发:其实就是找对象使用,没有对象,就创建一个对象。
找对象,建立对象,使用对象,维护对象的关系。
耦合:类与类的关系。
内聚:就是自己实现功能的能力。
一般开发都要做到,低耦合,高内聚。
基本数据类型的传递:
形参的改变对实参没有影响。
引用数据类型的传递:
形参的改变直接影响实参。
二、类和对象的关系:
类:将一组对象的公共属性和行为进行抽象,并加以描述的结果。类是对象的抽象化,概括出来的产物。
对象:就是这类事物,实实在在存在的个体。
对象是类型的具体(个体)化,实例化。
描述事物,其实就是在描述事物的属性和行为。
属性对应的是类中变量,行为对应的是类中的函数(方法)。
注:属性:又叫成员变量、成员属性、对象变量、对象属性、实例变量、实例属性。
属性的定义是被类体直接包含的。属性是类的成员之一!
eg:
class Person {
String name;
int age;
String sex;
}
其实定义类,就是在描述事物,就是在定义属性和行为,属性和行为共同成为类中的成员(成员变量和成员方法)。
注意:只在问题内抽象
定义对象的语法: 类名 对象名 = new 类名();
从上面这个语法可以看出类有两个作用:定义对象,定义实体。
三、匿名对象的使用
eg:
Person p = new Person();
p.display();
new Person().display();
匿名对象只能使用一次,所以如果你创建的对象只是想使用一次的话,那么可以使用匿名对象。
使用匿名对象可能还会用来调用函数。
eg:
fun(new int[]{1,2,3});
fun(new Person());
四、成员变量和局部变量(区别):
作用范围:
成员变量作用于整个类中;
局部变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。
五、封装(Encapsulation):
1.封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:将变化隔离;便于使用;提高重用性;提高安全性。
2.封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
3.Time类说明封装性(hour、minute、second)
要求:所有的属性都必须是private、方法是public、类也是public
要求:为所有的属性添加getter/setter,即访问器和设置器。
如果属性名字叫name,那么它的getter/setter方法名字分别是:getName()、setName()
其实getName有返回值,但没有参数;
setName()没有返回值,但有参数。
4.使用private完成封装,使用public提供公有访问接口,即让属性私有,提供公有getter/setter
成员访问权限比较:
权限大小
成员修饰符 public protected default(默认) private
同一个类中 OK OK OK OK
同一个包中 OK OK OK NO
子类访问 OK OK NO NO
不同包中 OK NO NO NO
六、 构造函数:
(1) 特点:
a.函数名与类名相同;
b.不用定义返回值类型; (定义时的特点)
c.不可以写return语句。
d.只能使用new来调用。(是调用时的特点)
作用: 给对象进行初始化(通常这么用).
注意: 多个构造函数是以重载的形式存在的。
(2) 默认构造函数
当一个类没有构造函数时,编译器会为这个类添加一个public的,而且
是无参、还无内容的构造器。
匿名调用对象的属性没有意义,调用功能(方法)有意义。
七、this 关键字:
(1) this 用法一: 看上去,适用于区分局部变量和成员变量同名情况。
【this为什么可以解决这个问题?this 到底代表的什么?】
this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
this 用法二:用于构造函数之间进行互相调用。
(2) 注意:this调用语句,必须是在构造函数中的第一行,而且只能在构造函数中使用。
---------------------- QQ:371524846 期待与您交流! ----------------------