面向对象概述
这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。
类:
类是一组属性和行为的集合,一类事物的共同特征(抽象),可以看做模板
对象:
类的实例化,具体的、有属性和行为的
属性:
对象的基本属性信息,可看做名词
行为:
对象的行为,可看做动词
面向对象特征
类的定义
属性:
类中方法外的属性(成员变量)
行为:
在类中通过成员变量实现(成员方法)
对象的定义
对象的调用
成员变量和局部变量的区别
在类中的位置不同
成员变量:类中,方法外
局部变量:方法中或者方法声明上(形式参数)
作用范围不一样
成员变量:类中
局部变量:方法中
初始化值的不同
成员变量:有默认值
局部变量:没有默认值。必须先定义,赋值,最后使用
在内存中的位置不同
成员变量:堆内存
局部变量:栈内存
生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
this关键字
this的定义
this代表: 所在类的当前对象的引用(地址值), 谁调用,代表谁
this的使用
this.变量名
构造方法
- 构造方法名必须与类名相同
- 构造函数不是方法,它们没有任何返回类型。
- 每个类都有一个构造函数,不管它是普通类还是抽象类。
- 构造函数可以使用任何访问说明符,它们也可以声明为私有。在java中可以使用私有构造函数,但是私有构造函数的作用域局限在类里面。
- 我们也可以定义一个和类名相同的方法,但方法必须要定义返回值的数据类型,我们可以据此判断和类名相同的方法和构造函数的区别。
- 如果我们没有在类中定义和实现任何构造函数,编译器就会在编译的时候自动在后台的代码中插入默认构造函数。
- this()和super()这两个语句如果放在构造函数代码里面,一定要放在构造函数代码里面的第一行。如果我们的代码里面没有这两个语句,编译器会在后台的代码中自动插入这两个语句。
- 构造函数可以重载(overload),但不能重写(override)。这意味着我们可以在类中重载(overload)构造函数,但不能重写(override)构造函数。
- 构造函数不能继承。
- 如果父类(super class)没有定义无参数构造函数(默认构造函数),那么编译器也不会自动在子类(child class)的后台代码里面自动插入默认构造函数。
- 接口没有构造函数。
抽象类可以有构造函数,抽象类的构造函数在创建具体类的对象的时候被调用到。
构造方法和方法的区别
构造函数的目的是初始化类的对象,而方法的目的是通过执行java代码来执行任务。
- 构造函数不能是抽象的(abstract)、最终的(final)、静态的(static)和同步的(synchronised),而方法则可以是。
- 构造函数没有返回类型,而方法有返回类型。