抽象类中可以存在非抽象成员或者类,抽象类中的抽象方法,只能有方法的申明,不能有具体的实现,抽象类不可以直接被实例化,它可以使用多态的形式,父类指向子类的应用。子类继承父类后,必须全部实现父类中的抽象方法,否则该子类也只能是抽象类.
接口是一种特殊的抽象类,接口中声明的所有方法都是抽象的。使用interface关键字定义一个接口。 定义接口使用的关键字是interface。
对于接口当中常见的成员:而且这些成员都有固定的修饰符。
全局常量。public static final
抽象方法。public abstract
由此得出结论,
接口中的成员都是公共的权限,权限都是最大的。
类与类之间是继承关系,类与接口之间是实现关系。
接口不可以实例化。 只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则,这个子类就是一个抽象类。
在Java中不直接支持多继承,因为会出现调用的不确定性,所以Java将多继承机制进行改良,在Java中变成了多实现。
一个类可以实现多个接口。一个类在继承另一个类的同时,还可以实现多个接口。
接口的出现避免了单继承的局限性。接口与接口之间是继承关系,而且接口可以多继承。
接口的特点:
接口是对外暴露的规则。
接口是程序的功能扩展。
接口的出现降低耦合性。
接口可以用来多实现。
类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
接口与接口之间可以有继承关系。
抽象类和接口的异同点:
相同点:都是不断向上抽取而来的。
不同点:
1,抽象类需要被extends继承,而且只能单继承。
接口需要被implements实现,而且可以多实现。
2, 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须由子类去实现。
3, 抽象类的继承,是is a关系,在定义该体系的基本共性内容。
接口的实现是like a 关系,在定义体系额外的功能。、
4,抽象类中的变量和方法没有默认修饰符,接口中的变量默认为public static final的, 接口中的方法默认为public abstract 5,一个类只能继承一个抽象类,一个类可以实现多个接口
什么时候使用抽象类,什么时候使用接口
如果能用接口,就不用抽象类,因为别人实现接口可以不占用继承的位置。 如果定义一个抽象的父类,其中所有方法都是抽象的,那么就定义为接口。 如 果定义一个抽象的父类的时候,需要有不抽象的方法,那么只能定义为抽象类。
2.在抽象类中可不可以定义静态类,静态方法,接口,以及静态类能否继承非静态类?
抽象类中可以定义静态类,静态方法,接口。但是注意了不能定义静态的抽象方法。
总觉得这几个问题纠结在一起有点别扭。呵呵。
静态类能继承非静态类,体现了程序的扩展性么。
3.静态类中可不可以定义抽象类,接口?
不能,个人是这么理解,被static修饰的类或者成员,不需要创建对象就可以直接使用,这也就是无法继承和复写或者是实现抽象类或者接口中的方法,失去了意义。
4.接口中能否定义静态类?如果某个类中实现了某个接口,那么在这个类中那些方法需要被重新改写?
接口中能定义静态类,这时候该静态类就相当于该接口中的一个静态成员。
如果某个类中实现了某个接口,需要复写父类中全部的抽象方法,否则该子类也会变成抽象类。
5.如果子类继承了一个抽象类,那子类中能否定义静态方法,子类中又需要覆盖父类的那些方法?
子类是否定义静态方法,跟继承没有任何关系,继承只是为了获取到父类中的某些成员,所以可以写。
只要涉及到说子类继承抽象类,那么子类就需要实现父类中的所有的抽象方法,否则子类会变成抽象类。
|