实现规则: 接口与实现类
抽象类与接口
- 抽象类可以只实现接口的一部分方法
- 抽象类还可以另外声明接口没有的方法,可声明抽象或者有方法体的方法
- 抽象类不一定有抽象方法,但有抽象方法一定是抽象类
普通类与接口
- 接口实现类(非抽象类),必须实现接口定义的所有方法,并且可以另外声明其他有方法体的方法,不能声明抽象方法;
总结:实现关系只存在于普通类与接口,或者抽象类与接口之间
继承规则:子类与父类,子接口与父接口
接口支持多继承, 类不支持多继承,类支持单继承
子接口与父接口
- 接口没有构造方法
- 接口可以继承接口,并且可以另外声明父类接口没有的方法,接口支持多继承
- 接口是隐式抽象的,所以interface关键字即声明一个接口,interface之前不需要使用abstract关键字
- 接口中的方法都是抽象方法,隐式地声明为抽象public abstract,并且只能是public abstract,否则报错。声明时不需要使用abstract关键字
- 接口中可以有成员变量,但是要被声明为public static final,并且只能是public,否则报错
- 接口中不能有静态代码块和静态方法,JDK1.8之后,接口中允许有静态方法和方法体
- 接口中的方法都是公有的
- 在子类接口中,可以不用把父类接口的方法重新写一遍,只要声明继承哪个父类即可,在子类接口中只写自己特有的方法
在实现子类接口时,会默认实现父类接口定义的所有方法以及子类接口特有的方法 - 没有任何属性和方法的接口被称作标记接口,表示继承该标记接口的子接口或者实现该标记接口的实现类可以具备某些功能,如serializable接口,凡是实现该接口的类才可序列化。
实现标记接口的类无需实现标记接口中的方法,因为标记接口中根本就没有方法,可以通过接口引用,调用实现类的方法(多态)
子类与父类
- 抽象类与抽象类:
抽象类可以继承抽象类,但不能实现抽象类,抽象类可以实现接口 - 普通类与抽象类:
普通类可以继承抽象类,但要实现抽象类中所有的抽象方法,否则必须声明为抽象
普通类不能实现抽象类,只能继承 - 普通类与普通类:
子类继承父类,如果功能和父类一致,可以不用将父类的方法重新写一遍,声明 extends即可,在调用子类时,会自动调用父类的相关方法
除非子类需要个性化父类的相关方法,才需要在子类中重写父类方法的功能,在 调用子类时,则会调用子类重写的方法而不是父类的方法
总结:
- 类与类之间只存在继承与被继承关系,无论是对于普通类之间还是抽象类之间,又或者是普通类与抽象类之间,不存在实现关系
- 接口与接口之间也只有继承关系,不存在实现关系
- 实现关系只存在于普通类与接口,或者抽象类与接口之间
- 父类的方法子类全都有,除了可以个性化父类的方法外(接口不行),还可以声明父类没有的方法,可以说,子类的功能不比父类少,且同样的方法子类可以有不同的功能(覆写)
本文详细介绍了面向对象中的抽象类与接口的区别与使用场景,以及类与类、接口与接口之间的继承关系。强调了实现关系仅存在于普通类与接口、抽象类与接口之间,同时阐述了接口的多重继承特性。此外,还讨论了类的继承规则,包括抽象类的继承和普通类的继承,指出子类可以扩展和个性化父类的方法。总结了类与类、接口与接口之间的关系,以及实现与继承的概念。
839

被折叠的 条评论
为什么被折叠?



