接口与抽象类
来源:互联网 发布:自学预算员 知乎 编辑:程序博客网 时间:2024/05/17 08:46
首先,复习下类的初始化过程:
1,先初始化父类的静态成员变量和静态代码块.(按声明的顺序初始化).
2,然后初始化父类的非静态成员变量和非静态代码块(按声明顺序初始化).
3,然后是父类的构造方法,关键是看子类调用的父类哪个构造方法(默认是无参构造方法).
4,然后是子类的静态成员和静态代码块.
5,然后初始化子类的非静态成员和非静态代码块.
6,然后是子类的构造方法.
注意:静态成员变量和静态代码块,初始化过程中,仅仅执行一次,
而非静态的每次都会执行一次!
这也就是常量是静态的,实例变量是非静态的.
还有:1,如果调用子类的有参构造方法,父类只有一个无参构造,那么子类会默认调用父类的无参构造
2,如果父类只有一个有参构造,那么子类必须显示的调用父类的有参构造.
还有抽象类是不能被实例化的,那么,实例化只能是一个非抽象类发起的,
不管这个类有几个抽象类(间接的继承),都是先由最上端的父类开始初始化,
按照初始化过程,从上而下,逐一启动初始化过程!初始化只和父类和子类的数据有关系,
跟方法是没有关系的!
<<父类>>抽象
|
\ /
<<父类>>
|
\/
<<父类>> 非抽象
|
\/
<<子类>>
=================================================================================
抽象类和接口的关系:
1,抽象类实现接口,可以不实现,也可以部分实现
覆盖父类的方法,父类一定有实现
实现接口方法,就算抽象父类重写成抽象方法
其实接口方法也是抽象方法,只是没有写abstract修饰词,
代码反编译工具反编译的接口代码是这个样子的:
public abstract interface AAA{
public abstract void hello();
}
也都是抽象的.
不管是接口的方法还是抽象类的抽象方法,统统是未实现的方法.
未实现的一律使用空心的三角型表示,
实现的覆盖的一律用绿色实心三角形表示.
方法如果throw异常,不管需不需要返回值
public String name(){
throw new NullpointerException("不管返回值,直接抛异常!");
}
0 0
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 抽象类与接口
- 抽象类与接口
- 抽象类与接口
- 接口与抽象类
- 接口与抽象类
- (1) 理解 Android Build 系统
- 面向对象_不同包下类之间的访问
- 十进制转换为16进制
- React Native环境配置和简单使用
- C++作业5.|最大公因数/反素数
- 接口与抽象类
- 第六章:枚举理解
- OpenCV Samples ------ BackgroundSubtraction
- linux的文件多路复用的操作
- 内存数据库中的索引技术
- (2) 在 Build 系统中添加新的内容 - 添加新的产品
- Laravel使用redis库
- C++11新特性——auto的使用
- 打印全局、局部、static变量的地址,确定其存储位置