1.接口和抽象类的区别?
1)成员的区别
抽象类:
成员变量:既可以是变量,也可以是常量
成员方法:可以存在抽象方法(必须携带abstract关键字),也可以有非抽象方法
构造方法:存在无参/有参构造方法,---目的需要给数据进行初始化,分层初始化
接口:
成员变量:只能是常量,存在默认的修饰符public static final修饰
成员方法:只能是抽象方法:存在默认的修饰符 public abstract
构造方法:没有
2)关系的区别
类与类之间: 继承关系,只支持单继承,不支持多继承,但是可以多层继承
类与接口: 实现关系,一个类继承另一个类的同时可以实现多个接口,中间逗号隔开
接口与接口: 继承关系,可以支持单继承,也可以支持多继承,多层继承...
3)设计理念
抽象类:----->强制子类必须完成的事情,由于存在继承关系,体现的是一种"is a"的关系!
接口-------->体现某个事物额外的功能,谁实现该接口就具备该功能,体现的是一种"like a"的关系!
Java面向对象---->面向接口编程
先去定义接口
需要根据一些相关的字段(参数)去接口中功能
2.abstract和哪些关键字冲突
final,static,private
3.一个类中没有抽象方法,这个类定义为抽象类的意义?
不想让当前这个类进行实例化,如何实例化呢
它可能提供一些静态功能,静态功能的返回值类型是它本身
举例:
jdk提供日历类 Calendar 抽象类
静态功能---返回值就是它本身
public static Calendar getInstance() {
//调用内部的其他方法
}
4.多态的成员访问特点
1)成员变量:编译看左,运行看左
2)成员方法:非静态 编译看左,运行看右(存在方法重写)
3)静态方法:算不上重写,编译看左,运行看左----:类名访问
4)构造方法:抽象类多态
存在继承关系(对类的成员进行数据初始化:分层初始化)