什么是类
类是封装对象的属性和行为的载体,具有相同属性和行为的一类实体被称为类
类是对一类事物描述,是抽象的、概念上的定义;
如何定义一个类:
[< 修饰符>] class < 类名>
{
[<属性>]
[<构造构造函数>]
[<方法>]
}
什么是对象
万物皆对象
对象是实际存在的该类事物的每个个体,因而也称实例
类与对象的关系:
类是抽象的概念,仅仅是模版;对象叫做类的实例化。类是对象的描述,对象是该类对象的实例。
面向对象的三大特征:
封装 继承 多态
类的组成 :
属性 (成员变量或field) 和 方法 (称函数或 method)
成员变量和局部变量
相同点:
1.遵循变量声明的格式: 数据类型 变量名 = 初始化值
2.都有作用域
不同点:
1.声明的位置的不同 :成员变量:声明在类里,方法外
局部变量:声明在方法内,方法的形参部分,代码块内
2.成员变量的修饰符有四个:public private protected 缺省
局部变量没有修饰符,与所在的方法修饰符相同。
3.初始化值:一定会有初始化值。
成员变量:如果在声明的时候,不显式的赋值,那么不同数据类型会有不同的默认初始化值。
局部变量:一定要显式的赋值。(局部变量没有默认初始化值)
4.二者在内存中存放的位置不同:成员变量存在于堆空间中;局部变量:栈空间中
总结:关于变量的分类:
1)按照数据类型的不同:基本数据类型(8种) & 引用数据类型
2)按照声明的位置的不同:成员变量 & 局部变量
构造方法?
构造方法的特征
名字与类名相同;
没有返回值(区别于void)
Java语言中,每个类都至少有一个构造方法,可以有多个,参数列表要不同;(重载 在本类中的行为)
如果类的定义者没有显式的定义任何构造方法,系统将自动提供一个默认的无参数的构造方法。所以:不编写构造方法就能用new Xxx()创建类的实例。
Java类中,一旦类的定义者显式定义了一个或多个构造方法,系统将不再提供默认的构造方法;
构造器的主要作用:
利用构造器参数初始化对象的属性
方法的定义
<修饰符> <返回类型> <方法名>([< 参数表>]) {
[< 语句>]
}
对象的创建
使用new+构造方法创建一个新的对象;
对象具有类中定义的属性及方法
使用“对象名.对象成员”的方式访问对象成员(包括属性和方法);
封装的意义
隐藏一个类的实现细节;
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
读写分离,便于修改,增强代码的可维护性;
为什么继承
继承让代码实现共享,提高代码的重用性,减少重复的代码
便于梳理
子类继承了父类,就继承了父类的方法和属性。
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。同时可以重写父类的方法
因而,子类通常比父类的功能更多。
在Java 中,继承的关键字用的是“extends”,即子类是对父类的“扩展”。
Java只支持单继承,不允许多重继承
一个子类只能有一个父类
一个父类可以派生出多个子类
This和super;
this表示当前类对象,是所在函数所属对象的引用。哪个对象调用了this所在的函数, this就代表哪个对象。
this()函数主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。this()只能用在构造函数中,并且只能在第一行。
super表示super表示当前类的父类。
在Java类中使用super关键字来引用父类的成分,可用于访问父类中定义的属性,可用于调用父类中定义的成员方法
super()函数在子类构造函数中调用父类的构造函数时使用,而且必须要在构造函数的第一行,所以在同一个构造函数中this()和super()不能同时出现。
父类和子类的成员变量的初始化顺序:
子类的构造方法先调用父类的构造方法
父类的构造方法调用时,系统先初始化父类的成员变量为默认值
然后调用父类的构造方法初始化父类的成员变量
分类的构造方法执行完毕后,回到子类的构造方法
在执行子类的构造方法前初始化子类的成员变量
初始化完毕后,在调用子类的构造方法初始化