返回顶部
首页 > 资讯 > 后端开发 > Python >java中抽象类和接口的相同和不同点介绍
  • 195
分享到

java中抽象类和接口的相同和不同点介绍

2024-04-02 19:04:59 195人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、抽象类是什么?二、接口是什么?三、抽象类和接口的异同点总结前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。 一、抽象类是什么? 在 Java 语言中使

前言

本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。

一、抽象类是什么?

在 Java 语言中使用 abstract class 来定义抽象类。抽象类是不能被实例化的,即不能用new关键字来实例化对象。包含抽象方法的一定是抽象类,但抽象类不一定包含抽象方法。如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类。抽象类中的抽象方法的修饰符只能为public或者protected。

为什么要在抽象类中定义抽象方法呢?下面我们来看一个代码实例:


package example;
 
import java.util.Date;
 
public abstract class GeometricObject {
	private String color="white";
	private boolean filled;
	private java.util.Date dateCreated;
	protected GeometricObject() {
		dateCreated=new java.util.Date();
	}//构建默认的几何对象
	protected GeometricObject(String color,boolean filled) {
		dateCreated=new java.util.Date();
		this.color=color;
		this.filled=filled;
	}
	public String getColor() {
		return color;
	}//返回颜色
	public void setColor(String color) {
		this.color=color;
	}//设置新的颜色
	public boolean getFilled() {
		return filled;
	}
	public void setFilled(boolean filled) {
		this.filled=filled;
	}
	public java.util.Date getDateCreated(){
		return dateCreated;
	}
	public abstract double getArea();//抽象方法定义得到面积
	public abstract double getPerimeter();//抽象方法得到周长
}

我们假设自定义的Circle类和Rectangle类均为GeometricObject的子类,且均有求各自面积的getArea()方法和各自周长的getPerimeter()方法,但这些方法并不能在父类中定义,因为具体的计算方法要取决于几何对象的具体类型。所以采取抽象方法进行定义,这样可以保证父类中的抽象方法可以在子类中被重写。

抽象类只有定义没有实现。

下面是抽象类值得注意的几点:

1.抽象方法不能包含在非抽象类中。如果抽象父类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象的。也就是说,在继承自抽象类的非抽象子类中,必须实现所有的抽象方法。还要注意到,抽象方法是静态的。

2.抽象类不能使用new操作符来初始化。但仍然可以定义它的构造方法,这个构造方法在它的子类的构造方法中进行调用。

3.包含抽象方法的类必须是抽象的。但是是可以定义一个不包含抽象方法的抽象类,这个抽象类用于作为定义新子类的基类。

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

5.不能使用new操作符从一个抽象类创建一个实例,但是抽象类可以用做一种数据类型。

例如:GeometricObject[] objects=new GeometricObject[10];是正确的,。

6.子类可以重写父类的方法并将它定义为抽象的,这虽然不常见,但很适用于当父类的方法实现在子类中变得无效时的情况。

二、接口是什么?

接口是一种与类很相似的结构,用于为对象定义共同操作,但它的目的是指明相关或者不相关类的对象的共同行为。

Java中接口使用interface关键字修饰。接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。

类和接口之间的关系称为接口继承。

下面是简单的代码举例:


package example;
 
public class TestEdible {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Object[] objects= {new Tiger(),new Chicken(),new Apple()};
		//创建由Tiger,Chicken和Apple类型的三个对象构成的数组
		for(int i=0;i<objects.length;i++) {
			if(objects[i] instanceof Edible)
				System.out.println(((Edible)objects[i]).howToEat());
			if(objects[i] instanceof Animal) {
				System.out.println(((Animal)objects[i]).sound());
		}
		}//如果可食用,则调用howToEat方法,如果是动物,则调用sound方法
	}
 
}
abstract class Animal{
	private double weight;
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight=weight;
	}
	public abstract String sound();//返回动物的声音,是抽象方法,被具体的animal类实现
}
class Chicken extends Animal implements Edible{
	@Override
	public String howToEat() {
		return "Chicken: Fry it";
	}//实现了Edible接口。当一个类实现接口时,该类实现定义在接口中的所有方法。
	@Override
	public String sound() {
		return "Chicken: cock-a-doodle-doo";
	}
}
class Tiger extends Animal{
	@Override
	public String sound() {
		return "Tiger:RROOAARR";
	}
}
abstract class Fruit implements Edible{
}//Fruit类实现了Edible,但没有实现howToEat方法,所以它必须定义为abstract。
class Apple extends Fruit{
		@Override
		public String howToEat() {
			return "Apple:Make apple cider";
	}
}//Fruit的具体子类必须实现howToEat方法,所以Apple类实现了howToEat方法。

需要注意的是,接口中所有的数据域都是public static final,而且所有方法都是public abstract,但Java允许忽略这些修饰符。

即下面的两个代码是等价的:


public interface T {
	public static final int K=1;
	public abstract void p();
}

public interface T {
	int K=1;
	void p();
}

尽管public修饰符对于定义在接口中的方法可以省略,但是在子类实现中方法必须定义为public。

三、抽象类和接口的异同点

一个类可以实现多个接口,但是只能继承一个父类。

首先我们先来列举个表格简单讲述一下抽象类和接口之间的异同点:

比较点 抽象类 接口
关键字 abstract class interface
字段 无限制 变量必须是public static final
方法 既可以含普通方法,又可以含抽象方法,无限制 只能含抽象方法,且必须是public的
继承/实现 只能被类或抽象类继承 既可以被接口继承,也能被类或抽象类实现
多重继承 不支持 可以继承多个父接口

java只允许为类的继承做单一继承,但是允许使用接口做多重继承。例如:


public class NewClass extends BaseClass implements Interface1,...,InterfaceN{
}

利用extends,接口可以继承其他接口,这样的接口被称为子接口。例如:下面的代码中,NewInterface是Interface1,...,InterfaceN的子接口。


public interface NewInterface extends Interface1,...,InterfaceN{
}

一个实现NewInterface的类必须实现在NewInterface,Interface1,...,InterfaceN中定义的抽象方法。接口可以继承其他接口但不能继承类。一个类可以继承它的父类同时实现多个接口。

所有的类都有一个共同的根类Object,但是接口并没有共同的根。与类相似,接口同样也可以定义一种类型。一个接口类型的变量可以引用任何实现该接口的类的实例。如果一个类实现了一个接口,那么这个接口就类似于该类的一个父类。可以将接口当作一种数据类型使用,将接口类型的变量转换为它的子类,反过来同样可以。

通常情况下,使用接口的频率更高,因为接口比类更加灵活,不用使所有东西都属于同一个类型的类。

下面进行一个简单的代码举例:


abstract class Animal{
    public  abstract String howToEat();
}//在Animal中定义howToEat方法
//Animal的两个子类定义如下
class Chicken extends Animal{
	@Override
	public String howToEat() {
		return "Chicken: Fry it";
    }
}
class Duck extends Animal{
	@Override
	public String howToEat() {
		return "Roast it";
    }
}
public static void main(String[] args) {
    Animal animal = new Chicken();
    eat(animal);
 
    Animal animal = new Duck();
    eat(animal);
}
public static void eat(Animal animal){
    System.out.println(animal.howToEat());
}

假设给定这个继承结构,java在调用方法时可以根据对象动态地决定调用具体的howToEat方法。但有一个限制条件,即该子类必须是另一种动物才可以。如果一种动物不可食用,那么此刻再继承Animal类就并不合适了。

限制条件这个问题在接口中可以被解决,例如:


public class Demo{
public static void main(String[] args) {
    Edible stuff = new Chicken();
    eat(stuff);
 
    Edible stuff = new Broccoli();
    eat(stuff);
  }
public static void eat(Edible stuff){
    System.out.println(stuff.howToEat());
  }
}
interface Edible{
    public String howToEat();
}
class Chicken implements Edible{
	@Override
	public String howToEat() {
		return "Chicken: Fry it";
	}
}
class Broccoli implements Edible{
	@Override
	public String howToEat() {
		return "Broccoli: Stir-fty it";
	}
}

定义表示可食用对象的一个类,只须让该类实现Edible接口即可。任何Edible对象都可以被传递以调用HowToEat方法。

总结

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

--结束END--

本文标题: java中抽象类和接口的相同和不同点介绍

本文链接: https://lsjlt.com/news/160258.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java中抽象类和接口的相同和不同点介绍
    目录前言一、抽象类是什么?二、接口是什么?三、抽象类和接口的异同点总结前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。 一、抽象类是什么? 在 Java 语言中使...
    99+
    2024-04-02
  • java中抽象类和接口的相同和不同点是什么
    这篇文章将为大家详细讲解有关java中抽象类和接口的相同和不同点是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言下面简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例。一、抽象...
    99+
    2023-06-22
  • Java中抽象类和接口的不同点有哪些
    这篇文章主要讲解了“Java中抽象类和接口的不同点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中抽象类和接口的不同点有哪些”吧!在Java语言中, abstract clas...
    99+
    2023-06-17
  • Java中抽象类和接口介绍
    目录1、抽象类1.1 什么是抽象类?1.2 抽象类属于什么类型?1.3 抽象类怎么定义?1.4 抽象方法2、接口2.1 关于接口2.2 接口怎么定义?2.3 接口基础语法总结1、抽象...
    99+
    2024-04-02
  • java中抽象类和接口有什么不同
    今天就跟大家聊聊有关java中抽象类和接口有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-14
  • Java中接口和抽象类有什么不同
    Java中接口和抽象类有什么不同?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。抽象类下面我们通过一个例子来看一个典型的抽象类的使用场景。Logger 是一个记录...
    99+
    2023-06-15
  • PHP中的接口和抽象类有何不同?
    接口和抽象类用于创建可扩展的 php 代码,它们之间存在以下关键差异:接口通过实现强制执行,而抽象类通过继承强制执行。接口不能包含具体方法,而抽象类可以。一个类可以实现多个接口,但只能从...
    99+
    2024-05-21
    接口 抽象类
  • java中接口与抽象类有什么不同
    今天就跟大家聊聊有关java中接口与抽象类有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。详解java中接口与抽象类的区别  1.abstract class 在 Java ...
    99+
    2023-05-30
    java
  • PHP5接口和抽象类的语法介绍
    这篇文章主要讲解了“PHP5接口和抽象类的语法介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP5接口和抽象类的语法介绍”吧!大家对PHP5接口和PHP5抽象类的语法了解有多少呢?下面...
    99+
    2023-06-17
  • Java中的抽象类和接口
    目录 一、什么是抽象类 抽象类在实现多态中的意义  二、接口是什么  通过接口实现多态 三、抽象类和接口的区别  各位铁汁们大家好呀😊! 😎今天让我们继续学习java,看看java中的抽象类和接口到底是什么...
    99+
    2023-08-31
    java Java接口 抽象类与多态
  • Java中比较抽象类与接口的异同
    目录一.抽象类(一)概念(二)抽象类和抽象方法(三)使用抽象类的意义二.接口(一)概念(二)语法三.比较抽象类与接口Q: 为什么有了抽象类还要接口? Q: 如何确定在什么情况下应该使...
    99+
    2024-04-02
  • Java不同版本接口语法和抽象类与接口的区别是什么
    本文小编为大家详细介绍“Java不同版本接口语法和抽象类与接口的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java不同版本接口语法和抽象类与接口的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-29
  • Java接口的继承与抽象类介绍
    这篇文章主要讲解了“Java接口的继承与抽象类介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java接口的继承与抽象类介绍”吧!在实施接口中,我们利用interface语法,将inter...
    99+
    2023-06-02
  • 深入理解JAVA抽象类和接口的比较与异同
    目录一、理解抽象类  二、从语法定义层面看抽象类和接口三、从编程的角度看抽象类和接口四、从设计理念层面看抽象类和接口五、总结 抽象类(abstract ...
    99+
    2024-04-02
  • Java和JavaScript有什么相同点和不同点?
    Java和JavaScript是两种非常常见的编程语言,它们在开发应用程序和网站方面都有着广泛的应用。虽然它们的名字很相似,但它们有着不同的用途和特点。本文将探讨Java和JavaScript之间的相同点和不同点。 一、相同点 编程语言 ...
    99+
    2023-08-26
    javascript 数据类型 关键字
  • JavaScript中call和apply的相同点和不同点
    这篇文章主要讲解了“JavaScript中call和apply的相同点和不同点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中call和...
    99+
    2024-04-02
  • Java详细讲解不同版本的接口语法和抽象类与接口的区别
    目录什么是接口?接口的语法: (JDK7.0)接口的语法: (JDK8.0)接口的语法: (JDK9.0)—(私有方法)接口的分类常量接口:空接口:函数式接口:什么是接口...
    99+
    2024-04-02
  • 深入浅析Java中抽象类与接口有什么不同
    这篇文章将为大家详细讲解有关深入浅析Java中抽象类与接口有什么不同,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。接口1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但...
    99+
    2023-05-31
    java 抽象类 接口
  • Java中怎么比较抽象类与接口的异同
    本篇内容主要讲解“Java中怎么比较抽象类与接口的异同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中怎么比较抽象类与接口的异同”吧!一.抽象类(一)概念    &n...
    99+
    2023-06-22
  • Java抽象类和接口的比较
    这篇文章主要介绍“Java抽象类和接口的比较”,在日常操作中,相信很多人在Java抽象类和接口的比较问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java抽象类和接口的比较”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作