我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java中比较抽象类与接口的异同

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java中比较抽象类与接口的异同

一.抽象类

(一)概念

      在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(abstract class)。在类的头部使用 abstract 修饰符表示该类为抽象类。

(二)抽象类和抽象方法

       同样用 abstract 声明抽象方法。抽象方法(abstract method)只定义成员方法的接口形式,而没有具体操作。只有派生类对抽象成员方法的重定义才能真正实现与该派生类相关的操作。在各子类继承了父类的抽象方法之后,再分别用不同的语句和方法体来重新定义它,形成若干个名字相同、返回值相同、参数列表相同、目的一致但是具体实现有一定差别的方法。抽象类中定义抽象方法的目的是实现一个接口,即所有的子类对外都呈现一个相同名字的方法。

1.一个包含抽象方法的类必须声明为抽象类

    几点说明:

   1.抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类。

   2.即使子类的父类是具体的,这个子类也可以是抽象的。

   3.当父类的方法实现在子类中变得无效时,子类可以重写父类的方法并将它定义为抽象的。

2.抽象方法只有定义而没有实现,它的实现由子类提供

  下面定义了一个抽象类Object类:


public abstract class Object {
	public abstract double getArea();
	public abstract double getPerimeter();
}

Object类是多个子类的父类,由于在多个子类中都要用到getArea()方法和getPermeter()方法,所以在父类中定义比较好;由于计算面积和周长的getArea()方法和getPermeter()方法在不同子类里的实现方式不同,所以Object类中定义的这两个方法的实现只能由子类提供。

3.抽象类无法被直接实例化,可以让子类继承然后实例化子类

  通过一个例子来说明:


public abstract class Person {
	//定义一个抽象方法
	public abstract void isSmoke();
}
 
//学生类
class Students extends Person{
	//继承抽象类后抽象类中的抽象方法必须在子类中实现
	public void isSmoke() {
		System.out.print("Students can't smoke.");
	}
}
 
//教师类
class Teachers extends Person{
	public void isSmoke() {
		System.out.print("Teachers can smoke.");
	}
}

(三)使用抽象类的意义

       因为抽象类不能实例化对象,必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,更有利于代码和程序的维护。同时,抽象类也是Java面向对象的一个重要体现。

二.接口

(一)概念

         接口(Interface),在Java编程语言中是一个抽象类型,是象方法的集合。

         接口通常以   interface  来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    接口有以下特性:

接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。接口中的方法都是公有的。

(二)语法

 1. 定义:一个简单的接口拥有全局变量和抽象方法。在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的。

 接口定义的一般形式为:

 [访问控制符]interface <接口名> {

         类型标识符final 符号常量名n = 常数;

         返回值类型  方法名([参数列表]);

         …

 }        

  定义接口实例:


interface Human {
	
	//定义一个全局变量
	final String txt="吸烟有害健康";
	
	//定义一个抽象方法
	public void isSmoke();
}

 2.实现:要实现接口,就必须去实现接口规定的方法,只有把接口规定的抽象方法都给实现了,才承认这个类实现了这个接口,实现了这个接口代表的某种功能。使用 implements 关键字实现接口。

  实现接口实例:


class Student implements Human{
	 
	public void isSmoke() {
		System.out.println("Students can't smoke.");
	}
	
	public static void main(String[] args) {
		Student h=new Student();  
        h.isSmoke();  
        System.out.println(txt);
	}
}

3.接口的继承

  子接口可以对父接口的方法和常量进行重写。例如:


// 接口 Student 继承 Human
public interface Student extends Human {
 
    // 重写父接口中的txt
    String txt = "未成年禁止吸烟";  
    
    // 重写父接口中的isSmoke()方法
    void isSmoke();  
}

 注意: 在Java中,类的多继承是不合法的,但接口允许多继承


public interface C extends A, B

三.比较抽象类与接口

Q: 为什么有了抽象类还要接口?

看起来抽象类除了多继承以外,完全可以完成接口所作的事情,为什么还需要定义接口呢?

1、避免java单继承的局限
2、避免多继承带来的复杂性和低效性
3、面向接口编程带来的优势。降低程序间的耦合,易扩展,易维护

 Q: 如何确定在什么情况下应该使用接口,什么情况下应该使用类呢?

        抽象类和接口都是用来指定多个对象的共同特征的。那么如何确定在什么情况下应该使用接口,什么情况下应该使用类呢?一般来说,清晰描述父子关系的强的“是......的一种”关系应该用类建模。弱的“是..的一种”关系也称为类属关系,它表明对象拥有某种属性,可以用接口来建模。

类型抽象类接口定义abstract关键字interface关键字继承可以继承一个类和实现多个接口;子类只可以继承一个抽象类接口只可以继承接口(一或多);子类可以实现多个接口方法实现可定义构造方法,可以有抽象方法和具体方法无构造方法,且方法都是抽象的,也没有方法的实现实现方式子类使用extend关键字来继承抽象类。如果子类不是抽象类,需要提供抽象类中所有声明的方法的实现子类使用关键字implements来实现接口。需要提供接口中所有声明的方法的实现作用把相同的东西提取出来,即重用把程序模块进行固化的契约,降低耦合

到此这篇关于Java中比较抽象类与接口的异同的文章就介绍到这了,更多相关Java抽象类与接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java中比较抽象类与接口的异同

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中怎么比较抽象类与接口的异同

本篇内容主要讲解“Java中怎么比较抽象类与接口的异同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中怎么比较抽象类与接口的异同”吧!一.抽象类(一)概念 在继承的层次结构中,
2023-06-22

Java抽象类和接口的比较

这篇文章主要介绍“Java抽象类和接口的比较”,在日常操作中,相信很多人在Java抽象类和接口的比较问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java抽象类和接口的比较”的疑惑有所帮助!接下来,请跟着小编
2023-06-17

java中接口与抽象类有什么不同

今天就跟大家聊聊有关java中接口与抽象类有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。详解java中接口与抽象类的区别  1.abstract class 在 Java
2023-05-30

深入探讨 Golang 函数接口与抽象类的异同

函数接口与抽象类均用于代码可重用性,但实现方式不同:函数接口通过引用函数,抽象类通过继承。函数接口不可实例化,抽象类可实例化。函数接口必须实现所有声明的方法,抽象类可只实现部分方法。Go 函数接口与抽象类的异同在 Go 语言中,函数接口和
深入探讨 Golang 函数接口与抽象类的异同
2024-04-20

Python中的接口类与抽象类

面向对象中的继承有两种用途:1)可以通过继承做到代码重用,并完成扩展;2)接口继承。所谓的接口继承就是定义一个接口类 Interface,接口类中定义了一些接口(就是函数,但这些函数都没有具体的实现),子类继承接口类,并且实现接口中的功能~
2023-01-31

PHP 中的抽象类与接口

本文介绍了 PHP 中抽象类和接口之间的区别。在讨论差异之前,首先,我们必须了解抽象类和接口的概念。 以下是抽象类和接口的要点。PHP 中的抽象类抽象类由开发者部分实现,至少包含一个抽象方法,一个没有任何代码的方法。 以下是理解抽象类的一些
PHP 中的抽象类与接口
2024-02-27

java中抽象类、抽象方法、接口与实现接口实例详解

前言对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦
2023-05-30

Java中接口和抽象类有什么不同

Java中接口和抽象类有什么不同?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。抽象类下面我们通过一个例子来看一个典型的抽象类的使用场景。Logger 是一个记录
2023-06-15

java中抽象类和接口有什么不同

今天就跟大家聊聊有关java中抽象类和接口有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数
2023-06-14

java中抽象类与接口的图文演示

首先看图:抽象方法: 没有方法体的方法、必须在与抽象类中、被abstract修饰的方法。1.抽象类可以存在抽象方法,可以存在普通方法2.抽象类不能实例化3.抽象方法必须被重写4.抽象类的使用:1)具体子类:重写所有的抽象方法+按需新增2)抽象子类:按需重写+按
java中抽象类与接口的图文演示
2016-11-10

深入浅析Java中抽象类与接口有什么不同

这篇文章将为大家详细讲解有关深入浅析Java中抽象类与接口有什么不同,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。接口1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但
2023-05-31

Java中抽象类和接口的不同点有哪些

这篇文章主要讲解了“Java中抽象类和接口的不同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中抽象类和接口的不同点有哪些”吧!在Java语言中, abstract clas
2023-06-17

Java接口的继承与抽象类介绍

这篇文章主要讲解了“Java接口的继承与抽象类介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java接口的继承与抽象类介绍”吧!在实施接口中,我们利用interface语法,将inter
2023-06-02

Java中接口与抽象类的区别是什么

本篇文章为大家展示了Java中接口与抽象类的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录