JAVA面向对象
1、this 用于区别成员变量与局部变量重名
在成员变量前面添加 this.
2、构造方法
A 构造方法概述:
作用:为了给对象的属性初始化
特点:方法名与类名相同,没有返回值,不需要void
注意:构造方法不能用对象调用,在创建对象的时候构造方法与已经执行。
B 构造方法重载:
方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
注意:如果不写构造方法,系统会自动给出空参构造。如果要给出有参构造的时候,必须要先给出空参构造。
3、static 关键字
*A:static关键字的特点
* a:随着类的加载而加 * b:优先于对象存在 * c:被类的所有对象共享 * d:可以通过类名调用
如果一个成员变量被所有对象共享,那么就可以把成员变量设置为静态static
*B 静态的注意事项
*a 静态方法中没有this关键字。
静态是随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。
*b 静态方法只能访问静态的成员变量和静态的成员方法
*C 静态变量和成员变量的区别
静态变量也叫类变量 成员变量也叫对象变量
*A:所属不同
*静态变量属于类,所以也称为为类变量
*成员变量属于对象,所以也称为实例变量(对象变量)
*B:内存中位置不同
*静态变量存储于方法区的静态区
*成员变量存储于堆内存
*C:内存出现时间不同
*静态变量随着类的加载而加载,随着类的消失而消失
*成员变量随着对象的创建而存在,随着对象的消失而消失
*D:调用不同
*静态变量可以通过类名调用,也可以通过对象调用
*成员变量只能通过对象名调用
5、代码块
A 代码块分类:
根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)
B:常见代码块的应用
* a:局部代码块: 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
* b:构造代码块 (初始化块): 在类中方法外出现;多个构造方法中相同的代码存放到一起,每次调用构造都执行,并且在构造方法前执行
* c:静态代码块: 在类中方法外出现,并加上static修饰;用于给类进行初始化,随着类的加载而加载,在加载的时候就执行(优先于主方法执行),且只执行一次。 *一般用于加载驱动
6、继承
A :继承的好处:* a:提高了代码的复用性 * b:提高了代码的维护性 * c:让类与类之间产生了关系,是多态的前提
B :继承的弊端:* 类的耦合性增强了。*开发的原则:高内聚,低耦合。*耦合:类与类的关系 *内聚:就是自己完成某件事情的能力
C :继承的特点: JAVA中只支持单继承(只有一个爹),支持多层继承(有祖宗)。
D: 继承的注意事项: *a:子类只能继承父类所有非私有的成员(成员方法和成员变量) * b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。 * c:不要为了部分功能而去继承
E: 继承中成员变量之间的关系: * 同名变量:就近原则
F: 继承中构造方法的关系:
* 子类中所有的构造方法默认都会访问父类中空参数的构造方法。* 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
每一个构造方法的第一条语句默认都是:super() ,即使不写,系统会默认加上,用来访问父类中的空参构造。
如果父类中没有给出无参构造,同时又写了有参构造,则会出现问题
G: 继承中成员方法之间的关系:
* 重写: 子父类出现了一模一样的方法 * 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
*方法重写注意事项:
a:父类中私有方法不能被重写 :因为父类私有方法子类根本就无法继承
b:子类重写父类方法时,访问权限不能更低,最好就一致
c:父类静态方法,子类也必须通过静态方法进行重写。 其实这个算不上方法重写,静态只能覆盖静态
子类重写父类方法的时候,最好声明一模一样。
H :Override(重写)和Overload(重载)的区别?
overload可以改变返回值类型,只看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
*子类对象调用方法的时候,先找子类本身,再找父类。
7、this 与super
*A:this和super都代表什么
* this:代表当前对象的引用,谁来调用我,我就代表谁
* super:代表当前对象父类的引用
*B:this和super的使用区别
* a:调用成员变量
* this.成员变量 调用本类的成员变量,也可以调用父类的成员变量(继承)
* super.成员变量 调用父类的成员变量
* b:调用构造方法
* this(...) 调用本类的构造方法
* super(...) 调用父类的构造方法
* c:调用成员方法
* this.成员方法 调用本类的成员方法,也可以调用父类的方法(继承)
* super.成员方法 调用父类的成员方法
注意:在一个构造方法中不能同时写this(...) 和super(...) 。 this(...) 和super(...) 必须卸载第一条语句。
8、final
A:概述:
B:final修饰特点
*修饰类,类不能被继承
*修饰变量,变量就变成了常量,只能被赋值一次
*修饰方法,方法不能被重写
*修饰引用数据类型:不能改变其地址值,但是可以改变其属性值
*修饰基本类型变量:不能改变其值。
9、多态(polymorphic)
A:概述:事物存在多种形态
B:多态前提: 要有继承、方法重写、父类引用指向子类对象
C:成员变量:编译看左边(父类),运行看左边(父类)
成员方法:编译看左边(父类),运行看右边(子类) 动态绑定。
静态成员方法:编译看左边(父类),运行看左边(父类) 静态和类相关,不算重写,看左边
D:多态的好处:提高了代码的维护性,提高了代码的扩展性。 把类当做参数的时候多态非常好,扩展性强。
10、抽象 abstract
抽象类特点:
抽象类和抽象方法必须用abstract修饰。
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口。
抽象类不能实例化,按照多态有子类实例化。
抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法。
抽象类中成员变量可以是常量也可以是变量。
抽象abstract 不能和static 、private、final共存(作用矛盾)
11、接口
接口特点:
用关键字interface表示: interface 接口名{}
类实现接口 :class 类名 implements 接口名{}
接口不能实例化,只能用多态的方式实例化
接口的子类可以是具体类,要重写接口中的所有抽象方法。 可以是抽象类,但意义不大。
成员特点:
成员变量只能是常量,并且是静态的公共的。 public static final
接口没有构造方法。 成员方法只能是抽象方法。 public abstract
12、类与类,类与接口,接口与接口
类与类:继承关系,只能是单继承关系,可以多层继承
类与接口:实现关系,可以是单实现,可以是多实现,并且可以继承一个类的同时实现多个接口
接口与接口:继承关系,可以单继承可以多继承
13、权限修饰符
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
14、内部类私有
A:内部类访问特点
* a:内部类可以直接访问外部类的成员,包括私有。
* b:外部类要访问内部类的成员,必须创建对象。
*外部类名.内部类名 对象名 = 外部类对象.内部类对象;
B:成员内部类私有使用