1. 抽象:abstract
a) 修饰类:抽象类,抽象类不能实例化(不能new),只能使用抽象类的子类。
抽象类也有构造方法(抽象类的子类需要在自己构造方法的第一行调用父类的构造方法)。
那么问题来了:
抽象类有构造方法,但是不能实例化?构造方法的作用是什么呢?
用于子类访问父类数据的初始化
b) 修饰方法:抽象方法,抽象方法只有方法的声明没有方法的实现。子类必须重写父类中所有的抽象方法(当子类为抽象类时,子类可以不重写父类中的抽象方法或只重写父类中部分的抽象方法)。
抽象方法所在的类必须为抽象类。抽象类中不一定有抽象方法。
c) 修饰接口
d) abstract不能与哪些关键字一起使用:final,private,static,
a:final 冲突
b:private 冲突
c:static 无意义
e) final关键字:
i. 修饰变量:只能赋值一次。
ii. 修饰方法:方法不能被子类重写。
iii. 修饰类:不能被继承。
面试题:final修饰局部变量的问题
基本类型:基本类型的值不能发生改变。
引用类型:引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的。
f) 阻止类被继承有几种方法:1.用final修饰类。2.使用private修饰构造方法。
总结:
1). 非抽象类的子类可以为抽象类。
2). 下面的抽象类可以new
abstract class Method { public int sum() { Method m = new Method() { public void run() { } }; return 0; } public abstract void run(); }
2. 接口:interface
a) 接口的作用:使JAVA实现多继承。
b) 接口的成员:
i. 常量:接口中的变量必须为public static final。声明后必须赋值。
ii. 抽象方法:接口中的方法必须为public abstract的。
c) 接口不是类,接口中没有构造方法。
d) 类与接口的关系:
i. 类可以实现(implements)接口。
ii. 当类实现接口时,类必须重写接口中所有的抽象方法。
iii. 一个类可以实现多个接口。
e) 接口不能实例化(不能new)。只能使用接口的实现类。
f) 接口与接口之间的关系:
i. 接口可以继承接口。
ii. 一个接口可以继承多个接口。
3. 内部类:一个类中嵌套另一个类
a) 内部类可以直接使用外部类所有的成员,包括private的成员。
4. 类与类,类与接口,接口与接口
A:类与类
继承关系,只能单继承,可以多层继承
B:类与接口
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口
C:接口与接口
继承关系,可以单继承,也可以多继承
5. 抽象类和接口的区别
A:成员区别
抽象类:
成员变量:可以变量,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
B:关系区别:
类与类:继承,单继承
类与接口:实现,单实现,多实现
接口与接口:继承,单继承,多继承
C:设计理念不同
抽象类:is a,抽象类中定义的是共性功能。
接口:like a,接口中定义的是扩展功能。