Java基础(8):面向对象—抽象类和接口的区别和各自特点

    xiaoxiao2021-03-25  58

                                         

    抽象类和接口的简单定义:

    从上面图中来看,越往上越抽象。个人理解抽象的本质是为了提取出通用的方法和状态。在通常对类的定义中,类是对象的抽象,是对象的模板,而抽象类也可以理解为对类的抽象,是类的模板。如果一个类中没有足够的信息来描绘一个具体对象,那这个类就可以定义为抽象类。

    接口类算是一个特殊的抽象类,它提供统一的协议,体现一种规范,只要实现了接口,就必须实现其中的所有方法。在接口中,不提供具体实现方式。

    抽象类的语法规则:

    抽象类介乎于普通类和接口类之间,所以在抽象类中,即能定义抽象方法,也能定义普通方法。定义抽象方法需要加上abstract ,抽象方法是没有方法体的。

    抽象类可以有构造方法,接口类没有。如果没有构造方法,那抽象类的子类无法创建对象,那抽象类就毫无意义。

    抽象类是不能实例化的,从面向对象思想来看,抽象类本身是对类的抽象,是用于描述类的,并不具备描述对象的能力,所以实例化没意义。从代码运行运行角度来看,如果抽象类可以实例化,又该怎么去调用抽象方法呢?所以抽象类实例化也不可能。

    接口类的语法规则:

    接口类中只能定义抽象方法,但是Java8为接口增加了默认方法,默认方法和普通方法一样,只是采用default修饰。实现类也可以调用接口中的默认方法。

    接口类中的方法默认是 public abstract 类型,所以在接口类中定义方法省略修饰符。 

    接口中的成员变量默认是static和final类型的,默认是常量,所以要手动初始化。常量记得全大写。

    接口可以继承另一个接口,例如: interface A{ void test(); }  interface B extends A { } ,B接口中可以获得接口A中的所有方法。

    使用场景:

    如果你有几个类共同使用一批方法,并且想让它们中的有些方法有默认实现,那么使用抽象类。可以做到普通类与接口类结合的折中方式。如果要实现多重继承时,必须使用接口。因为在Java中不允许子类继承多个父类,但允许实现多个接口,因此可以使用接口来解决该问题。

                                         

    抽象类和接口的简单定义:

    从上面图中来看,越往上越抽象。个人理解抽象的本质是为了提取出通用的方法和状态。在通常对类的定义中,类是对象的抽象,是对象的模板,而抽象类也可以理解为对类的抽象,是类的模板。如果一个类中没有足够的信息来描绘一个具体对象,那这个类就可以定义为抽象类。

    接口类算是一个特殊的抽象类,它提供统一的协议,体现一种规范,只要实现了接口,就必须实现其中的所有方法。在接口中,不提供具体实现方式。

    抽象类的语法规则:

    抽象类介乎于普通类和接口类之间,所以在抽象类中,即能定义抽象方法,也能定义普通方法。定义抽象方法需要加上abstract ,抽象方法是没有方法体的。

    抽象类可以有构造方法,接口类没有。如果没有构造方法,那抽象类的子类无法创建对象,那抽象类就毫无意义。

    抽象类是不能实例化的,从面向对象思想来看,抽象类本身是对类的抽象,是用于描述类的,并不具备描述对象的能力,所以实例化没意义。从代码运行运行角度来看,如果抽象类可以实例化,又该怎么去调用抽象方法呢?所以抽象类实例化也不可能。

    接口类的语法规则:

    接口类中只能定义抽象方法,但是Java8为接口增加了默认方法,默认方法和普通方法一样,只是采用default修饰。实现类也可以调用接口中的默认方法。

    接口类中的方法默认是 public abstract 类型,所以在接口类中定义方法省略修饰符。 

    接口中的成员变量默认是static和final类型的,默认是常量,所以要手动初始化。常量记得全大写。

    接口可以继承另一个接口,例如: interface A{ void test(); }  interface B extends A { } ,B接口中可以获得接口A中的所有方法。

    使用场景:

    如果你有几个类共同使用一批方法,并且想让它们中的有些方法有默认实现,那么使用抽象类。可以做到普通类与接口类结合的折中方式。 如果要实现多重继承时,必须使用接口。因为在Java中不允许子类继承多个父类,但允许实现多个接口,因此可以使用接口来解决该问题。

    转载请注明原文地址: https://ju.6miu.com/read-39764.html

    最新回复(0)