1.final关键字
- final能修饰类、方法、属性
- 使用final修饰的类不能被继承
- 使用final修饰的方法不能被重写
- 使用final修饰的变量变成常量,不能被修改
2.抽象类
- 抽象类:包含一个抽象方法的类就是抽象类
- 抽象方法:声明而未被实现的方法就是抽象方法,抽象方法必须使用abstract关键字声明
- 抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法
- 定义格式:
abstract class ClassName{
属性
方法
抽象方法
}
abstract class Abs{
private int age;
public void tell(){
}
public abstract void say();//抽象方法
public abstract void print();//抽象方法
}
class AbsDemo extends Abs{
public void say(){
}
public void print(){
}
}
3.接口
- 接口可以理解为一种特殊的类,里面全部是由全局变量和公共的抽象方法组成
- 接口的格式:
interface InterfaceName{
全局变量
抽象方法
}
- 接口的实现也必须通过子类,使用关键字implements,而且接口可以是多实现(继承)的
- 如果一个子类实现了接口,那么该子类必须实现父接口的所有方法
- 一个子类可以同时继承抽象类和实现接口
- 一个接口不能继承抽象类,但是却可以通过extends关键字同时继承多个接口,实现接口的多继承
interface Inter1{
public static final int age = 18;
public abstract void tell();
}
interface Inter2{
public abstract void say();
}
abstract class Abs{
public abstract void print();
}
class A extends Abs implements Inter1,Inter2{
public void tell(){
}
public void say(){
}
public void print(){
}
}
interface Inter3 extends Inter1,Inter2{
}
4.抽象类与接口的异同点
- 都不能被实例化
- 接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化
- 接口中不能有实现的方法,抽象类中可以有
- 接口需要用implements实现,抽象类用extends
- 接口可以被多继承,抽象类只能单继承
- 接口中定义的成员变量默认修饰符为public static final,而且必须给其赋初值。抽象类可以有自己的数据成员变量,也可以有非抽象的成员变量,而且抽象类中的成员变量默认为default(本包可见)