一、抽象类
抽象方法:使用关键字
abstract修饰,并且没有方法体,直接以;结尾的方法将子类的共性方法抽取到父类中,而父类针对这个方法无法描述每个子类的具体实现时,这种方法就是抽象方法。
注:
- 抽象方法所在的类必须是抽象类
- 抽象类不能被实例化
- 子类继承了抽象类,必须重写父类中所有抽象方法,否则子类也是抽象类
- 抽象类中可以有构造函数
- 抽象类中可以有非抽象方法
- 抽象类中可以没有抽象方法
- 抽象类一定是一个父类
抽象类的使用步骤:
- 创建类继承抽象类
- 重写抽象类中的所有抽象方法
- 创建子类对象调用
匿名对象:创建对象时,不指定数据类型和引用变量名
好处:方便
弊端:同一个匿名对象只能使用一次
匿名内部类:
new 类名(){ // 重写 };作用是创建指定类的子类对象
二、关键字final
final关键字可以用来修饰:
- 变量:变量的值不能改变
- 方法:方法不能被重写
- 类:类不能被继承
三、关键字static
static关键字可以用来修饰:
- 变量:如果这个变量是类中所有对象的共享属性时,可以修饰成static
- 方法:一般工具类中的方法都是静态的
- 代码块
注:
- 静态成员随着类的加载而加载
- static只能修饰成员,不能修饰局部
- static修饰的成员属于整个类的所有对象,是类中所有对象的共享内容,不属于某一个对象
- static成员应该通过类名访问
- 静态方法只能调用静态成员,不能调用非静态成员;非静态的方法可以调用静态成员也可以调用非静态成员
- 静态方法中不能使用
this和super- 静态方法不能被重写,父类中的静态方法可以用父类名或者子类名调用
静态常量:被
public static final修饰的变量
不能同时使用的关键字:
abstract和static、abstract和final、private和abstract
四、接口
4.1、概念
关键字:
interface概念:接口是一种特殊的类,接口在编译后也生成
.class文件,接口中方法全部都是抽象方法,它是一个比抽象类更加抽象的一种类型格式:
public interface 接口名{ }好处:
- 扩展了功能
- 对外提供了规则
注:
- 接口不能创建对象
接口中成员的特点:
- 成员变量:默认被
public static final修饰- 成员方法:默认被
public abstract修饰
4.2、接口的使用步骤
关键字:实现
implements
创建实现类实现接口
格式:
public interface 接口名{ } public class 实现类 implements 接口名{ }实现接口中的所有抽象方法
创建实现类对象进行调用
接口的使用也可以通过匿名内部类来实现:
public class Test { public static void main(String[] args) { new Usb(){ @Override public void connect() { System.out.println("哈哈"); } }.connect(); } } interface Usb{ void connect(); }
4.3、类和接口的关系
类与类的关系:继承,子类继承父类
public class 子类 extends 父类{ }注:类与类之间只有单继承
类与接口的关系:实现,实现类实现接口
public class 实现类 implements 接口1,接口2,..{ } public class 子类 extends 父类 implements 接口1,接口2,..{ }注:
- 一个类可以实现多个接口
- 子类在继承父类的同时还可以实现接口
接口与接口的关系:继承,子接口继承父接口
public interface 子接口 extends 父接口1,父接口2,...{ }注:子接口可以继承多个父接口
4.4、接口中的新特性
默认方法
从JDK1.8开始,接口中允许定义非抽象方法
public default 返回类型 方法名(参数列表){ }注:
- 接口中的默认方法可以不重写,重写时不能使用
default- 实现类实现的多个接口中有同名方法,实现类就必须重写
- 实现类中调用接口的默认方法:
接口名.super.方法名()- 子类继承父类的同时实现接口,父类中的非抽象方法和接口中的默认方法同名时,子类可以不重写,子类对象调用时优先访问父类中的
静态方法
从JDK1.8开始,接口中允许定义静态方法
public static 返回类型 方法名(参数列表){ }注:接口中的静态方法只能由接口名调用
私有方法
从JDK1.9开始,接口中允许定义私有方法
private 返回类型 方法名(参数列表){ }接口中私有方法的意义:那些只对接口中的默认方法进行支持,又不需要对外暴露的方法就应该是私有的
4.5、抽象类和接口的异同
同:
- 都不能实例化
- 都需要子类(实现类)来继承(实现)
- 都可以有抽象方法
异:
- 类只能单继承,接口可以多继承
- 抽象类中的成员变量与普通类中的成员变量相同;接口中的成员变量都是静态常量
- 抽象类中除了抽象方法其他方法与普通类相同;接口中的成员方法都是抽象方法
- 抽象类中有构造函数;接口中没有构造函数
- 抽象类是一类事物的集合;接口是功能的集合
抽象类和接口的选用:建议使用接口,实现接口避免了单继承的局限性