在学习Java的过程中我个人认为JavaOOP是最难的,因为这些对于一个新手来说思想是抽象的,很难理解。接下来我就把我的学习中的个人笔记分享一下(可能涉及的面不是很全接受批评,共同进步)
JavaOOP
什么是对象?
名称(形容词) -- > 描述 事物 特征
动词--> 描述 事物 功能
对象 = 名词(特征-->成员变量) + 动词(功能-->方法)
万物皆对象
很多人对于对象理解的不清晰就是因为你的思维逻辑还没有进入一个合适编程式的状态,会把很多抽象的东西想的非常困难,甚至超出宇宙的奥秘,从本来可以用简单的思维完成的思考,想的超出了人类的逻辑,开始思考人类自身然后想的脑阔痛,也想不出来。
什么是面向对象的编程?
就是描述程序中所存在的对象,以及对象和对象之间的关系。
什么是类?
类就是具有共同特征对象的集合-->不存在现实世界中,是一种抽象。
对象类在现实世界的具体体现-->存在于现实世界中
类的共同特征:
以人为例
人类-->类
共同特征:
吃、喝、玩、乐....--->动词
姓名、性别、年龄、身高、体重 ..-- > 名词
通过类如何描述对象?
类名 引用名 = new 构造方法调用
什么是 this关键字?
this-->当前对象
什么是当前对象?正在调用含有this关键字的对象
什么是构造方法?
a) 构造方法的结构
(1) 构造方法没有返回类型
(2) 构造方法的名称和当前类的类名一致
b) 构造方法的作用
(1) 是实例化对象的必须步骤
(2) 在对象产生的同时,给对象的特征(成员变量或者属性)做初始化
c) 构造方法的产生的时机
(1) 如果没有自定义构造方法,系统会在new 对象的过程中自动的创建一个不带参数的构造方法
(2) 如果有了自定义构造方法,系统就不会创建不带参数的构造方法
面向对象的核心
抽象/封装/继承/多态
抽象:在完成某功能的过程中通过分析抽离出该功能需要的各种数据(属性、方法.....)
继承:子承父业
好处:
1、子类可以直接使用父类的资源
2、站在巨人的肩膀上起步可以更高
类比到开发编码中:
优势:
1、提高代码的重用性
2、提高代码的扩展性
继承的语法:
子类 extends 父类
问题:
(1)一个子类能不能同时继承多个父类?
JAVA中的继承是单继承
(2)继承能不能传递?
A extends B
B extends C
A是否可以使用C和B中的资源?
可以
所有的类都基层自一个顶层类Object
继承中构造方法的特点?
当实例化子类对象的时候会先调用父类构造方法再调用自己的构造方法
super关键字?
当前类的父类对象
super():系统自动生成在每个类的构造方法第一行,表示当前类的父类不带参数的构造方法(如果是自己编写一定要在构造方法的第一行)
封装
利用一种机制来控制数据的可见性,这种机制-->访问修饰符
四个访问修饰符
public->protect->默认->private(从左往右可见性逐渐缩小)
public所修饰的数据在任何情况下都是可见的(本类、同一个包下的不同类之间、同一个包下的父子类之间、在不同包下的父子类或者无关类之间)
private所修饰的数据只在本类中是可见的
protect和默认所修饰的数据,在同一个包下和public是一样的;不同包下protected是有可能被访问到的,但是默认的是一定不能访问的。
3、javabean-->是一种封装数据的方法
要求:
(1) 类必须是public的
(2) 所有的属性必须是private的
(3) 为每一个属性提供一组setter/getter方法用于访问(设置/取值)
//setter赋值方法
public void set首字母大写的属性名(参数) {
this.属性名 =参数;
}
//getter取值方法
public String get首字母大写的属性名() {
return this.属性名;
}
(4) 必须含有至少一个无参构造方法
问题:
1、能不能设计出只读或者只写的属性
只读:
属性private
只为属性提供getter方法
只写:
属性private
只为属性提供setter方法
4、多态:一个事物在不同条件下所呈现出的不同状态
例子:水
0度以下:固态
0~100度:液态
100以上:气态
在程序中的多态是怎么表现的?
1、从未微(从方法)观角度
方法在不同条件下呈现的不同状态:
(a) 方法的重载:扩展本类中同类型方法的功能
(1) 在同一个类中
(2) 方法名必须相同
(3) 参数列表不能相同(参数的数量不同,参数类型不同,不同数据类型的顺序不同,相同类型但是顺序不同不叫参数列表不同)
(4) 返回类型没有限制
(5) 访问修饰符没有限制
(6) 和异常的关系.....
问题:
(1) 构造方法是否能重载?
答:可以
(2) Object类中是否有重载的方法?
答:有,wait()方法
(b) 方法的重写:子类方法覆盖父类方法的功能
(1) 父子类之间
(2) 方法名相同
(3) 参数列表相同
(4) 返回类型相同
(5) 访问修饰符子类方法的访问的不能小于父类方法的
(7) 和异常的关系.....
问题:
(1)构造方法是否能重写?
答:不行
(2)Object类中是否会被有重写的方法?
答:有,Object中的equals()和toString()、hasCode()
2、从宏观(从对象)角度
对象在不同条件下呈现的不同状态
对象多态的前提:
(1) 必须在父子类之间
(2) 必须有方法重写
(3)必须有父类引用指向子类对象
A是 B的父类
B b = new B();一般实例化
A a = new B();父类引用指向子类对象
为什么要使用多态?
简化代码结构,提高代码的可维护新
理解多态:
1、实例化对象的时候
父类引用 = 之类对象
2、方法的参数
定义:public void 方法名(父类引用)
调用:方法名(之类对象)
3、方法的返回值
public 父类 方法名(参数列表){
return 之类对象
}
未完待续