Java基础之 接口、抽象类、构造方法、setXxx,getXxx、静态变量和成员变量、代码块、this和super的区别、final关键字、重写与重载
接口:
1). 什么是接口?
接口是对外暴露的规则.
2). 如何定义接口?
使用关键字 interface 接口名{}
3). 接口与类的关系?
实现关系, 可以单实现, 也可以多实现, 但是多个接口名之间, 需要用逗号进行分隔.
使用关键字: implements
class 实现类 implements 接口名{
}
4). 接口是否可以实例化?
不可以实例化, 因为内部含有抽象方法.
抽象类:
1). 什么是抽象类?
把像的部分和相似的部分抽取到一个父类当中, 抽象类就是一个特殊的父类.
这个特殊的父类和普通的父类,区别就在于, 抽象类当中可以定义抽象方法.
2). 如何定义抽象类和抽象方法?
通过abstract关键字
类: abstract class 类名{}
方法: public abstract 返回值类型 方法名();
3). 抽象类是否可以创建对象?
不可以, 如果允许的话, 就代表可以调用没有方法体的抽象方法, 这样做没有任何意义.
4). 抽象类的子类?
1. 重写所有的抽象方法 -> 推荐
2. 将自己本身也变成抽象类
5). 抽象类的成员特点?
1. 成员变量
可以是变量, 也可以是常量
2. 成员方法
可以是普通的方法, 也可以是抽象方法
3. 构造方法
有, 目的是为了给子类进行初始化的
总结: 抽象类当中除了可以定义抽象方法之外, 其余的定义跟普通的类没有区别.
构造方法:
1). 构造方法的作用?
用来给对象中的属性进行初始化的.
一般都会通过有参构造创建对象, 并给属性赋值.
2). 构造方法的格式?
A. 方法名要与类名相同, 大小写也要一致
B. 没有返回值类型连void都没有
C. 没有具体的返回值
问题 : 构造方法没有返回值, 可以编写return语句吗?
可以, 但是return后面不能跟上具体的值.
3). 构造方法的注意事项?
如果一个类当中, 没有给出任何构造方法, 那么系统将会默认提供一个空参的构造方法, 但是如果手动给出了有参构造
系统将不会再提供默认的空参构造
建议: 今后空参有参都手动给出.
4).构造方法可以重载吗?
构造方法也是方法, 所以可以进行重载.
setXxx与getXxx:
给成员变量初始化有几种方式?
答:
1. 通过有参构造初始化
2. 通过setXxx方法初始化
问题: 两种方式有什么区别?
答案: 一般都是通过有参构造进行(初始化), 再通过setXxx方法(修改)属性值
两者往往是配合使用的
静态变量和成员变量
什么是静态
答 : 静态指的就是static关键字, static是一个修饰符
被其修饰的成员有什么特点?
1). 静态关键字的特点是?
a: 随着类的加载而加载, 优先于对象存在
b: 被类的所有对象所共享
c: 多了一种调用方式, 可以通过类名.进行调用
2). 静态的好处是?
a: 调用方便
b: 节约内存
3). 静态关键字的注意事项?
a: 静态当中只能访问静态成员(方法,对象).
问题: 静态中是否有this\super关键字? 为什么?
没有, this代表当前对象的引用, this只有在创建对象之后,才会存在, super也是一样.
静态存在的时候, 有可能对象没有被创建出来, 所以说静态当中没有this和super.
08. 静态变量和成员变量的区别?
1. 所属不同:
静态变量 : 类
成员变量 : 对象
2. 内存位置不同
静态变量 : 方法区中, 字节码文件的静态区
成员变量 : 堆内存
3. 内存出现时间不同
静态变量 : 随着类的加载而加载
成员变量 : 随着对象的创建而存在
4. 调用不同
静态变量 : 多了一种调用方式, 可以通过类名.进行调用, 也可以通过对象名进行调用
成员变量 : 只能对象名进行调用
代码块
1). 什么是代码块?
被一对大括号括起来的代码, 就称之为代码块
2). 代码块的分类?
1. 局部代码块
位置: 方法中的一对大括号
作用: 限定了变量的声明周期, 可以提早的释放内存
2. 静态代码块
位置: 类中方法外的一对大括号, 需要加入static修饰
作用: 一般用于加载驱动, 获得数据库连接
特点: 随着类的加载而执行, 且只执行一次.
-----------------------------------------
3. 构造代码块
4. 同步代码块
this和super的区别
1).this和super的区别
1). 什么是this关键字?
this代表当前对象的引用, 谁来调用我, 我就代表谁.
2).什么是super关键字
super : 代表的是当前对象父类的引用.
2). 调用方面有什么区别?
成员变量:
this : 可以调用本类的成员变量, 也可以调用父类的成员变量
前提: 子父类当中没有出现重名的成员变量.
super : 可以调用父类的成员变量
成员方法:
this : 可以调用本类的成员方法, 也可以调用父类的成员方法
前提: 子父类当中没有出现重名的成员方法.
super : 可以调用父类的成员方法
构造方法:
this() : 调用本类的构造方法
super() : 调用父类的构造方法
简单记: this调用的是本类成员, super调用的是父类成员.
final关键字
final可以修饰类,方法,变量。
被修饰的类: final修饰的类不可以被继承。
被修饰的方法: final修饰的方法不可以被覆盖。
被修饰的变量: final修饰的变量是一个常量。只能被赋值一次。
重写和重载
问题: 重写和重载的区别是?
重载(Overload)
在同一个类中, 方法名相同, 参数列表不同, 与返回值无关
参数列表不同:
1. 类型不同
2. 个数不同
3. 顺序不同(没有意义)
好处:可以提高代码的阅读性,(见名知意)
错误误区:在一个类中,方法名相同,参数列表也相同,这不是重载,这叫方法重新定义
重写(Override)
子父类当中, 出现了方法声明一模一样的方法, 返回值类型小于等于父类的类型.
问题: 方法重写有哪些注意事项?
a: 子类重写父类的方法, 访问权限必须大于等于父类的权限
b: 子类不能重写父类中私有的方法.