抽象类中可以定义抽象方法的
当一个抽象类中的方法全是抽象的
这是,可以通过另一种特殊的形式来体现。
可以将该类定义为接口。
interface。。
接口里的方法只能是抽象的,
接口中的成员的定义格式:
1,定义变量:但是变量必须有固定的修饰符 public static final所以接口中的变量也称之为常量。(可以领略,编译器会自动加上)。
2,定义方法:方法也有固定的修饰符:public abstract
接口里的成员都是公共的。(可以领略,编译器会自动加上)。
接口的特点:
1.接口不可以创建对象,
2.子类必须要覆盖掉接口中的所有的抽象方法后,子类才可以实例化。否则子类也会是一个抽象类。
接口的子类:子类与子类的关系是继承,类与接口之间的关系是实现,通过关键字:implements
例子: class DemoImpl implements demo{
//重写接口中的所有方法:
}
接口与抽象类是有很大区别,抽象类可以通过接口定义但接口比抽象类具有更多功能。
接口最重要的体现:
多继承弊端:当多个父类有相同功能时,子类调用会产生不确定性。
解决多继承的弊端,将多继承这种机制在java中通过多实现完成。class C implements A,B{}//多实现,利于多态化。
原因在于:多继承父类中的功能有主体,而导致调用运行时,不确定哪个主体内容 ,多实现接口中没有方法体,需要有子类来明确。
如果子类想要继续扩展其他类中的功能呢?这是可通过实现接口来完成。
接口的好处:
1,接口的出现对功能实现了扩展,2,接口的出现定义了规则,3,接口的出现降低了耦合性(解耦)。说明有两方,一方在使用规则(如笔记本电脑),一方在实现这个规则(笔记本的外围设备)。
接口的出现避免了单继承的局限性,父类中定义的事物的基本功能,接口中定义的事物的扩展功能。
接口可支持多继承,指的是接口与接口之间,支持多继承!
例子:interface interC extends interB,interA{}
没有抽象方法的抽象类的由来:
为了使用接口中的部分方法,而覆盖了全部的方法,而且每一个子类都要这么做,复用性差。
解决:将这些不用的方法单独抽取到一个独立的类中,让这个类去实现接口,并覆盖接口中的所有方法。但这个类不知道具体的实现内容,所以只能为了后期的子类创建对象方便而进行空实现,而这时,这个类创建就像就没有意义,因为其主体内没有方法内容,这个类创建对象就不需要,则可以直接将其抽象化。这就是没有抽象方法的抽象类的存在意义。
接口与抽象类的区别:
1,抽象类是描述事物的基本功能,可以定义非抽象的方法,
接口中定义的只能是抽象方法。
2,类与类之间是继承关系 is a关系。
类与接口之间是实现关系 like a关系。
|
|