两种编程思想
面向过程编程POP
侧重于分析完成事情的过程。
面向对象编程OOP
所有事情交给相应的对象完成,侧重于如何创建解决问题的对象。
类和对象的关系
- 对象是类的具体表现,类是对象的集合(模板)。
- 先定义类,才能通过该类创建对象。
成员变量、局部变量和静态常量
成员变量
定义在类中的变量,称为成员变量,拥有默认值
局部变量
定义在方法中的变量,称为局部变量。默认有默认值,赋值后才能使用
静态常量
特殊的成员变量,用final static修饰。它有默认值。通过类名访问。
面向对象三大特性
封装
使用private关键字对属性进行修饰。再对外提供一组公开的get/set方法用于对该属性读取或赋值。 可以防止除自身类之外的地方对该属性就行访问。 这样做可以保护关键属性,隐藏类内部的实现细节。
继承
- 类A可以通过extends关键字继承类B
- 类A称为子类、派生类、衍生类、subClass
- 类B称为父类、根类、超类、superClass
- 继承后,子类可以访问父类中非私有(没有被private修饰的内容)的属性和方法。
重写Override
当子类继承父类后,可以对父类中非私有的方法进行扩展或覆盖,这个过程称为方法重写。
方法重写要求:
- 方法名、参数列表、返回值必须和父类一致
- 访问权限不能比父类更严格(访问修饰符的范围要么一致要么更大)
- 不能抛出比父类更大的异常
方法重载overload
在一个类中,如果多个方法的方法名相同,参数列表不同时,这些方法称为重载的方法。
方法重写要求:
- 方法名相同
- 参数列表(参数类型和数量)不同
- 与返回值无关
this和super关键字
这两个关键字,都可以当做对象使用,也可以当做构造方法使用。
当做对象使用
用法:“this.属性”或“this.方法”或“super.属性”或“super.方法” ,此时的this或super表示“当前类”或"父类对象"。
当做构造方法使用
用法:"this([参数])或super([参数])" ,此时的this([参数])或super([参数])表示当前类或当前类的父类的某个构造方法。如果当做构造方法使用时,只能写在另一个构造方法中的第一行。
Object类
是所有类的父类。任何类都间接地继承了该类,但没有明确地使用extends体现出来。所有类都可以访 问Object类中的方法,或对其进行重写。
多态
在继承关系中,子类的对象可以保存到父类的变量中。 多态通常应用于定义方法时,形参为一个父类或接口类型变量,实参可以是子类对象。
向上转型
子类对象可以直接使用父类变量保存,即多态。
向下转型
访问修饰符
final
用于修饰属性、方法和类
- 修饰属性:变量变为常量,不能改变其中的值。
- 修饰方法:方法成为最终方法,不能重写。
- 修饰类:类成为最终类,不能被继承。
抽象abstract
修饰方法
使用: 访问修饰符 abstract 返回值类型 方法名(参数类型 形参名称);如果一个方法的方法体无法描述,是由其子类进行重写,可以将该方法定义为抽象方法。 该抽象方法所在的类,也必须用abstract修饰,让其成为一个抽象类。
修饰类
使用: 访问修饰符 abstract class 类名{}
- 如果一个类中有抽象方法,这个类必须也是一个抽象类。
- 抽象类不能被实例化(不能创建对象)。 抽象类中,可以存在非抽象方法,如getter/setter或构造方法。
- 当抽象类的构造方法执行时,不会创建对象。
- 当一个类不希望创建它本身对象或在它其中有抽象方法时,就将该类定义为抽象类。
接口interface
用于定义接口的关键字。代替class。
如果某个抽象类中全都是抽象方法时,可以将这个类改为接口。
- 接口是一个完全抽象类,其中的方法都是public abstract修饰的抽象方法,没有方法体,其中的属 性都是public final static修饰的静态常量。
- 接口中没有构造方法,不能创建对象。
- 接口通过implements实现,实现它的类称为该接口的实现类。 一个类可以同时实现多个接口。
- 一个类实现了接口后,必须重写其中的抽象方法。
- JDK1.8后,可以在接口中定义default方法和static方法,该方法不用重写。
定义接口
static
- 如果某个属性或方法被高度重用时,可以将其定义为static静态的。
- 这样这些属性就会脱离对象,在类加载时就加载到内存中,从而直接通过类名即可访问。
- 或不想创建对象就想使用该类中的属性或方法时,将它们定义为静态的。
个人总结
现在是学习JAVA的第二周,讲的是JAVA面向对象相关的知识,对于零基础的我来说学起来明显比第一周的JAVA基础吃力的多,讲的东西很抽象,本来跟着老师的的思路走听得懂,容易理解,但是一叫我们动手做作业的时候,哪里调用哪里的方法,就找不到东南西北了,思路还捋不清楚,好在下课休息的时候反复看了老师录的视频写的笔记,算是搞懂了。
做作业的时候,本来自己知道该怎么做,但是一运行起来,总感觉和的要求有点不一样,还有些细节的东西,因为自己的马虎导致代码出现一些基础性的问题,好在自己慢慢的检查最后还是成功的排除代码的故障。
在这一周的学习中,我学到了很多,如知道如何构造方法,属性的封装,子类的继承,还有多态的用法等等,让我受益匪浅,在接下来的时间里,我会投入更多的时间来学习,哪里没搞懂就反复看一老师录得视频和做的笔记,并且多练习老师讲的例题。