一. 访问权限
- default:同一包内可见
- private:同一类内可见
- public:所有类可见
- protected:同一包内的类和所有子类可见
二. 抽象类和接口
1. 抽象类(abstract)
- 抽象类和抽象方法都使用abstract关键字声明
- 一个类中包含抽象方法,那么这个类必须声明为抽象类
- 抽象类不能被实例化,只能被继承
2. 接口(interface)
- 接口中的方法被隐式的指定为 public abstract
- 接口中的属性被隐式的定义为 public static final
- 接口可以继承其他接口,且支持多继承
问题1:抽象类和接口的区别?
- 抽象类中的方法可以有实现具体功能的方法体,但是接口中的方法不行
- 抽象类中的成员变量可以是各种类型,而接口中的成员变量只能是 public static final 类型
- 抽象类可以有静态代码块和静态方法,接口不行
- 一个类只能继承一个抽象类,却可以实现多个接口
函数式接口(Java 8新特性)
函数式接口就是有且仅有一个抽象方法的接口,可以被隐式转换为lambda表达式
@FunctionalInterface //检查是否是一个函数式接口
interface GreetingService{
void sayMessage(String Message);
}
//使用Lambda表达式表示该接口的一个实现
GreetingService gs = message -> System.out.println("Hello" + message);
Lambda表达式:(接口中抽象方法的形参列表 )- > {重写接口中抽象方法的方法体}
- 形参列表只有一个参数,可以省略(),数据类型可省略,由编译器推断得出
- 方法体只有一条语句,可以省略{},如果是一条return语句,可以省略return
三. 重写和重载
1. 重写(override)
子类继承父类,实现了一个与父类在方法声明上完全相同的一个方法,进行覆盖操作
2. 重载
在同一个类中,存在多个同名方法,但是参数类型、个数、顺序至少有一个不同,编译器会根据不同的参数表,调用相对应参数的方法