Java基础之面向对象基础
到面向对象啦
1.java面向对象的特征
1、封装
2、继承
3、多态
2.面向对象和面向过程的关系
面向过程是面向对象的基础, 面向对象基于面向过程实现的, 但是代码思想层面上, 面向对象时更高级的设计思想
3.类与对象的关系
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。
4.成员变量的默认值
数据类型 默认值
基本类型:整数(byte,short,int,long) 0
浮点数(float,double) 0.0
字符(char) '\u0000'
布尔(boolean) false
引用类型: 数组、类、接口... null
5.成员变量和局部变量的区别
1.定义位置不同
成员变量: 类中方法外
局部变量:方法中
2.内存位置不同
成员变量:堆空间
局部变量:栈空间
3.生命周期不同
成员变量:随着类对象的创建而创建,随着对象的消失而消失
局部变量:随着所在方法的执行而创建,随着方法的执行完毕而消失
4.默认值不同
成员变量:有默认值
局部变量:没有默认值
变量定义的注意事项 : 定义在方法中变量, 如果没有赋值, 不能使用
6.this和super关键字
this表示本类当前对象的引用
super表示本类当前对象父类的引用实际代码中this和super的使用:
1.this : 当前类型对象的使用
可以区分成员变量与局部变量的重名问题, 带有this关键字的变量表示成员变量的使用
2.super : 当前类型对象的父类引用
1)子父类定义重名成员变量, super.成员变量表示父类成员的使用
2)子父类定义重名成员方法(子类重写), super.方法() 父类中的方法功能
3)子类构造方法第一行, 一定要调用父类构造, 为了保证父类成员优先于子类进入到内存中 super(父类构造实际参数);
当成员变量和局部变量重名, 带有this关键字的变量表示成员变量的使用,带super表示父类的变量
7.构造方法的特点
1)方法名必须和类名一致
2)不需要返回值
3)默认被jvm调用使用, 构造方法调用时机:
在创建对象同时, 被JVM虚拟机主动调用,并且创建一次对象, 构造方法只调用一次, 因为构造方法无法手动通过对象名调用
4).super() : 父类构造调用. 必须写在构造方法第一位置上, 直接保证父类构造优先于子类进入内存运行
8.标准实体类
1.私有的属性
2.公有的getter/setter方法
3.空参构造
4.实现序列化接口
9.静态方法中可以存在this关键字吗?
答:不可以,因为this属于对象
10.静态成员变量和非静态成员变量的区别
1.概念上,所属不同:
非静态变量属于对象
静态变量属于类,类变量
2.内存空间不同,存储位置不同
非静态变量属于对象,所以存储在堆内存中
静态变量属于类,存储在方法区的静态区中
3.内存时间不同,生命周期不同
非静态变量属于对象,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失
静态变量属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失(内存管理)而消失
4.访问方式不同
非静态变量只能使用对象名访问
静态变量既可以使用对象访问,也可以通过类名访问:
类名.静态变量名 或者 对象名.静态变量
类名.静态方法名()
11.高内聚、低耦合是什么意思
1.高内聚 : 类中功能进行尽量多
2.低耦合 : 少与外类发生密切关联
12.为什么子类无法继承父类的构造方法
原因:
父类的构造方法需要和父类的类名一致、子类的构造方法需要和子类类名一致,父类和子类的类名不一样。因此无法继承,名称有冲突。
父类的构造方法用于给父类的成员变量赋值,子类的构造方法用于给子类的成员变量赋值,子类的成员变量较多,使用父类的构造方法无法将子类中所有的成员变量都进行赋值,因此不继承父类的构造方法
解决:
子类不继承父类的构造,但是可以【调用】父类的构造方法。
13.java支持单继承,不支持多继承,java支持多层继承
单继承:一个子类只能继承一个父类(一个孩子只能有一个亲爹)
不能多继承:一个子类不能同时继承多个父类
可以多层继承:A类可以继承B类,B类可以继承C类,A类中拥有B、C类中的所有属性和方法。
14.代码块分类
局部代码块 限定变量的生命周期
构造代码块 由jvm调用在构造方法之前
静态代码块 属于类,只执行一次
同步代码块(多线程)
15.抽象类和抽象方法的关系
抽象方法所在的类必须是抽象类
抽象类中未必一定都定义抽象方法,抽象类中未必存在抽象方法
16.抽象类有构造方法吗?
有
虽然本类无法创建对象,但是抽象类一定有子类,子类会访问父类的抽象方法。
是否有构造方法,不取决于是否可以创建对象,而是取决于是否可以定义成员变量。如果可以定义成员变量,那么就需要初始化成员变量,就是构造方法来完成的。
17.接口中只能是抽象方法吗?
在jdk1.8以前是的,
在jdk1.8以后,接口中可以定义添加默认方法、静态方法
18.接口中是否可以定义出构造方法?
不可以,原因 : 因为接口中不能定义出成员变量, 只有可以定义成员变量的类型, 才能够定义出构造方法
19.类与类、类与接口、接口与接口之间的关系
1、类与类
继承的关系,使用extends关键字
可以单继承、不可以多继承、可以多层继承
2、类与接口:
实现关系,使用implements关键字
java中有单实现和多实现
3、接口与接口:
继承关系,使用extends
可以单继承、也可以多继承、可以多层继承
多继承的格式:
20.创建一个成员内部类对象
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
21.权限修饰符从小到大权限罗列
private :私有的 限定范围是:本类中使用, 通常修饰成员变量
默认的 :啥也不写 限定范围: 本类和本包(package)中使用
protected :受保护的 限定范围: 本类和本包中使用,其他包的子类
public :公共的 限定范围:没有范围, 通常修饰类和方法
22.成员变量初始化顺序
默认初始化--》显示初始化---》构造初始化
23.代码块
静态代码块:属于类,只执行一次,最先执行
构造代码块:类中方法外,每次都在构造方法之前执行