抽象类:
abstract关键字:抽象 虚
这个类定义成抽象,这个类不能实例化。
抽象类一定依赖子类完成实例化
抽象类一定要去动态绑定。
一个子类去继承一个抽象父类的时候,必须实现这个类的抽象方法:
调用哪个重写的方法,是由new的对象决定的:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
写个验证码:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
抽象类是用abstract关键字修饰的,不能实例化,不能去new创建对象。
抽象类可以有构造函数,提供给子类的构造函数完成依赖
抽象类可以有抽象方法,也可以没有抽象方法。
一般来说:抽象类提供设计抽象方法,给子类继承实现,就是为了方法重写。
如果一个类有抽象方法,这个类肯定是抽象类。
abstract和static不能同时修饰一个方法
static修饰的不能方法重写,抽象方法要方法重写
抽象方法在父类中不能实现,所以没有方法体
接口:
接口是完全的抽象类, 它不能实例化, 不能有构造函数,不能有实例方法。
接口作用:: Java为了加强动态绑定,为了加强方法重写(为了加强多态)
抽象类和接口一定是父类,一定是被子类继承和实现。
接口中所谓的变量,不是变量,是常量。
接口中的方法都是要被重写的,所以方法不能修饰成private
抽象类和接口作用是一样的
*
* 何时定义成抽象类?何时定义成接口? 优秀考虑级别
*
* 1. 抽象类设计的参考是:子类是同一类型 学生 老师 学生类型和老师类型是不是同一类。 子类 is 父类 建议考虑是抽象父类 是true。
*
*
* 2. 接口设计的参考是: 接口父类 has 包含 子类 功能 人 run() 汽车 run() 球 run()
*
*
* 抽象类和接口区别,统一描述
*
* 共同点:
* 1. 都不能实例化,都不能new。
* 2. 作用:为了加强动态绑定,为了加强方法重写,就是为了加强多态。
* 3. 接口和抽象类都是父类,都是被继承和实现的。
*
* 不同点:
* 1. 接口中定义都是常量final,抽象类不是。
* 2. 抽象类可以有构造函数,接口不可以有构造函数
* 3. 接口中一定有抽象方法,抽象类可以有抽象方法,也可以没有。
* 4. 子类继承抽象类extends关键字,子类实现接口implements关键字
* 5. 继承只能单继承,接口可以多实现(多继承),多个父类。
(调用哪个重写的方法,是由new的对象决定的)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
只能直接继承一个父类(extends),可以实现多个父类(implements)
Java的多继承是通过接口来实现的。
定时爬虫,TimerTask是抽象类, 实现其他功能必须要用implements(接口)
lambda表达式:
实现lambda表达式 需要1.8的环境。
类 名 = ( )->{ };