抽象类 abstract
**可以规范子类的实现**
①、用abstract修饰的方法叫抽象方法。
注:抽象方法不能有方法体。
②、用abstract修饰的类叫抽象类
public abstract class{}
③、抽象类的构造方法,存在是为了让子类继承本类属性和方法
④、不能修饰:构造方法、final方法、static方法、private方法
注:
①、含有抽象方法的类 必须定义为抽象类,但抽象类可以没有抽象方法
②、子类继承父类必须实现父类中的所有抽象方法(重写),否则子类也必须定义为抽象类
③、抽象类不能被实例化
(写一个类继承方法,以免调用到抽象方法无法执行抽象方法的方法体 而报错)
接口
都是抽象方法
class 类
* interface 接口 (只有抽象方法和静态常量)
* 抽象方法
* 公共静态常量
接口中的静态方法 , 只能由 接口名字调用
一个类只能继承一个父类(单继承),但它可以同时实现多个接口 implements连接
要先继承 再实现
如果只实现了一个 接口 有默认方法, 不需要重写
如果同时实现了两个接口, 中有同名同参数的默认方法, 必须重写
可以通过 接口名字.super.方法名字() 调用指定接口中的方法
如果就是想要自己的逻辑 可以将提供好的 接口名字.super.方法名字() 删掉,写自己逻辑就可以了
抽象类和接口的区别
抽象类使用abstract,接口使用interface
抽象类和接口都不能实例化
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量!!!!!!!(注意重点在 普通 即 非静态 和 变量!!!!)
3.抽象类中可以包含抽象方法,也可以不包含,接口中只能包含抽象方法和静态常量,jdk1.8之后接口可以包含静态方法和默认方法。
4.抽象类和接口中都可以包含静态成员变量(static),抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
5. 一个类可以实现多个接口,但只能继承一个抽象类。
6. 抽象类: 创建对象是没有意义的, 不用创建
接口 : 拓展功能
抽象方法:规范子类的实现
功能:
1>抽象类一般用来表示同类事物,接口可以表示不是同类事物。
2>抽象类可以实现代码的重用,也可以约束子类的功能。接口就是约束实现类的功能,降低代码之间的耦合性。
使用场景:
子类继承抽象类就不能再继承其他类(java的单继承原则),所以有抽象方法时优先使用接口定义
如果所有方法都没有实现,优先使用接口.
一些方法已经可以实现,而另一些方法无法或不想实现时,且继承(实现)关系很简单时,考虑用抽象类定义,留给后代去实现。jdk8之后,也可以在接口中定义default方法或static方法来实现.
默认方法 : 允许存在方法体
1. 默认方法和静态方法的对比
存在默认方法和静态方法, 简化实现类的实现
1. 静态方法 只能由接口名字调用, 不允许重写, 在所有实现类都满足功能的时候, 静态方法, 可以减少实现类创建对象的过程
2. 默认方法: 总有一些特殊的实现类,方法体不同, 需要重写, 只能考虑默认方法
public default void tongdian(){
System.out.println("zif");
}