代码块
概述: 在java中使用{}括起来的内容
分类: 局部代码块 , 构造代码块 , 静态代码块 , 同步代码块(多线程)
局部代码块: 位置在方法定义中
构造代码块: 位置在类中方法外 , 特点: 每创建一次对象都调用一次 , 并且优先于构造方法执行
静态代码块: 位置在类中方法外 , 前面添加一个static 特点: 随着类的加载而加载,只执行一次 ,优先于构造代码块
继承
格式: class 子类名 extends 父类名 {}
好处:
(1): 提高了代码的复用性
(2): 提高了代码的维护性
(3): 让类与类产生了关系,是多态的前提
弊端:
让类与类产生了关系,增强了耦合性
特点:
(1): 只能是单继承 ,不能是多继承
(2): 可以使用多层继承
注意事项:
(1): 父类中私有的成员不能被子类继承
(2): 父类中的构造方法不能被子类继承,但是可以通过super去访问
(3): 不能为了部分功能去使用继承
继承中成员变量的访问特点:
变量在访问的时候遵循一个"就近原则"
查找顺序:
(1): 在子类的局部位置
(2): 在子类成员位置
(3): 在父类的成员位置找
(4): 报错
this和super的区别:
this: 表示是本类对象的一个引用,谁调用我this就代表谁
super:表示的是父类存储空间的一个标识(理解: 父类对象的运用)
成员访问格式:
成员变量
this.变量名 本类的成员变量
super.变量名 父类的成员变量
构造方法
this(...) 本类的构造方法
super(...) 父类的构造方法
成员方法
this.方法名(...) 本类的成员方法
super.方法名(...)父类的成员方法
继承中构造方法的访问特点:
子类在初始化的时候,默认去调用父类的无参的构造方法
所有的构造方法的第一句都是super()
注意事项:
this(...) 和 super(...)必须是构造方法第一行
Object: 所有的类都是直接的或者间接的继承自该类
继承中成员方法的访问特点:
查找顺序:
(1): 在子类中查找
(2): 在父类中查找
(3): 报错
方法重写与方法重载的区别
方法重写: 子类中出现了和父类中一模一样的方法(方法名, 返回值类型 , 参数列表)
方法重载: 在同一个类中,允许同时存在一个以上的同名方法只要它们的参数列表不同, 与返回值无关
final关键字
特点:
final(最终的)
修饰类 被修饰的类不能被继承
修饰变量 被修饰的变量其实是一个常量
引用类型 指的是地址值不能被改变
基本类型 指定是值不能被改变
修饰方法 被修饰的方法不能被子类重写
final的初始化时机问题:
a: 只能被赋值一次
b: 在构造方法结束前赋上值就OK了(非静态的)
多态
前提:
(1): 需要有继承
(2): 需要有方法重写,没有方法重写也是可以的,但是没有意义
(3): 父类的引用指向子类对象
Fu f = new Zi();
多态中成员的访问特点:
成员变量: 编译看左边, 运行看左边
成员方法: 编译看左边 , 运行看右边
静态成员方法: 编译看左边 , 运行看左边
好处:
(1): 提供了代码的维护性(继承)
(2): 提供了代码的扩展性(多态)
弊端:
不能访问子类特有的功能
向下转型: 就是把父类的引用强制转换成子类的引用 Zi zi = (Zi)f ;
向上转型: 父类的引用指向子类对象 Fu f = new Zi();
抽象类
特点:
(1): 抽象类格式: abstract class 类名 {}
抽象方法的格式: public abstract 返回值类型 方法名(...);
(2): 抽象类中可以有非抽象方法,也可以有抽象方法,如果一个类中存在抽象方法,那么就需要将该类定义为抽象类
(3): 构造方法
有, 用于子类在访问数据的时候初始化
(4): 抽象类不能对其进行直接实例化,但是可以对其进行间接的实例化(多态的形式)
(5): 抽象类的子类
a: 可以是抽象类
b: 可以是具体的类,但是这个具体的类需要重写抽象类中的抽象方法
成员特点:
(1): 成员变量 可以是变量,也可以是常量
(2): 构造方法 有 , 用于子类在访问数据的时候初始化
(3): 成员方法 可以是抽象方法,可以是非抽象方法
面试题:
abstract不能和那些关键字进行共存?
private 冲突
final 冲突
static 无意义
接口
特点:
(1): 定义接口的格式 interface 接口名{}
(2): 类实现接口的格式 class 类名 implements 接口名{}
(3): 接口不能对其进行直接的实例化,但是可以通过多态的形式对其进行间接的实例化
(4): 接口的子类
a: 可以是抽象类
b: 可以是非抽象类,该类必须重写接口中的抽象方法
(5): 接口中没有构造方法,并且接口中的方法都是抽象方法
成员特点:
成员变量 只能常量,存在默认的修饰符 public static final
构造方法 没有
成员方法 只能是抽象方法,存在默认的修饰符 public abstract
类与类 , 类与接口, 接口和接口的关系
类与类: 继承关系(extends),只支持单继承,不支持多继承 , 但是可以多层继承
类与接口: 实现关系(implements) , 可以是单实现,也可以是多实现,并且一个类可以在继承一个类的同时,实现多个接口
接口和接口: 继承关系(extends),可以是单继承,也可以是多继承
抽象类和接口的区别:
a: 成员区别
抽象类
成员变量 可以是变量,也可以是常量
构造方法 有
成员方法 可以是抽象方法,也可以非抽象方法
接口
成员变量 只能是常量 public static final
构造方法 没有
成员方法 只能是抽象方法 public abstract
b: 关系区别
类与类: 继承关系(extends),只支持单继承,不支持多继承 , 但是可以多层继承
类与接口: 实现关系(implements) , 可以是单实现,也可以是多实现,并且一个类可以在继承一个类的同时,实现多个接口
接口和接口: 继承关系(extends),可以是单继承,也可以是多继承
c: 设计理念
抽象类 体现的是"is a"关系 定义的都是该继承体系中共性的内容
接口 体现的是"like a"关系 定义的都是该继承体系中扩展性的东西 |
|