面向对象基础
+例子
生活场景:一日三餐。
面向过程: 自己需要做买菜 - 洗菜 - 做饭 - 吃饭 - 洗碗 得过程
面向对象: 请一个保姆,每天等吃
场景升级:
你是富豪,有一个占地3000亩得庄园,每日得衣食住行
面向过程:自己重复做饭过程,重复打扫过程。。。
面向对象:聘请保姆,园丁,司机。。。
总结: 面对过程编程在大的程序里面很繁琐,面对对象编程我们把方法都封装起来,用得时候直接调用,减少了很多重复得代码
三大思想 | 三大特征 |
---|---|
OOA:面向对象分析 | 封装性:所有内容对外都不可见 |
OOD:面向对象设计 | 继承性:将其他得功能继承下来继续发展 |
OOP:面向对象程序 | 多态性:方法的重载本身就是一种多态的体现 |
类与对象
- 类由属性和方法构成:
- 属性:相当于人得一个个特征,例如:名字,年龄
- 方法:相当于人的一个个行为,例如:吃饭,睡觉
- 类必须通过对象得调用才可以使用
堆栈
-
栈里面放对象名称和基础数据类型, 堆里面放类的对象 new clasee();
-
Book b1
b1为对象名(默认值null) =new Book()
为对象(在堆中开创空间eg:0x123) ,进行赋值 -
同时 Book的方法加载到方法区中。
-
b1.name = "金苹果"
b1操作地址0x123,令名字和ifo变量赋值。 -
Book b2 = new Book();
b2 也进行操作,new book()新开一个内存; -
b2操作地址0x124,进行赋值
-
随后
b2 = b1
将b1 的地址赋值给b2 -
此时b2 = 0x123 ,因为0x124 地址块没有被引用,所以当GC发现的时候会被自动回收内存空间。
-
b2.name = "铜苹果"
b2 操作地址0x123,将name 改成铜苹果, -
此时利用b1调用方法,输出的也是铜苹果。
构造方法
- 每个类中系统都会自动构造一个无参无操作的构造方法(当你自己构造了一个后,系统便不会自动生成无参构造)
- 无参构造方法,在
new Person2();
的时候就被调用了。
方法的重载
(同名,参数不同(可以是位子顺序不同))
- 当方法功能一致时(都是sum) 就无法区别名字,可以用方法重载。
+ 构成重载:
+ 1、方法名字相同(与返回值类型无关)
+ 2、参数列表的长度、类型或者顺序不同