您的位置:首页 > 编程语言 > Java开发

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

2017-04-04 23:11 429 查看


                                     


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

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

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



抽象类的语法规则:

抽象类介乎于普通类和接口类之间,所以在抽象类中,即能定义抽象方法,也能定义普通方法。定义抽象方法需要加上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中不允许子类继承多个父类,但允许实现多个接口,因此可以使用接口来解决该问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  this super 关键字
相关文章推荐