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

目录
  • 一.抽象类
    • (一)概念
    • (二)抽象类和抽象方法
    • (三)使用抽象类的意义
  • 二.接口
    • (一)概念
    • (二)语法
  • 三.比较抽象类与接口
    • Q: 为什么有了抽象类还要接口?
    •  Q: 如何确定在什么情况下应该使用接口,什么情况下应该使用类呢?

一.抽象类

(一)概念

      在继承的层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类称为抽象类(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抽象类与接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java抽象类和接口的区别详情

    1.抽象类 vs 接口  方法类型: 接口只能有抽象方法.抽象类可以有抽象和非抽象方法.从 Java 8 开始,它也可以有默认和静态方法. 最终变量: 在 Java 接口中声明的变量默认是最终的.抽象类可能包含非最终变量. 变量类型: 抽象类可以有final.non-final.静态和非静态变量.接口只有静态和最终变量. 实现: 抽象类可以提供接口的实现.接口不能提供抽象类的实现. 继承 vs 抽象:  Java 接口可以使用关键字"implements"来实现,抽象类可以使用关键字&

  • Java接口和抽象类有什么区别

    接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制. 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现. 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念.类描述对象的属性和方法.接口则包含类要实现的方法. 除非实

  • 深入浅析Java 抽象类和接口

    目录 一.抽象类 1.抽象类 1.1抽象类的定义 1.2抽象方法的定义方式 1.3抽象类的定义方式 2.抽象类和实例类的区别 3.抽象类示例 4.抽象类的特征 二.接口 1.接口 1.1接口的定义 1.1定义一个接口 1.2 接口的使用 1.3接口的注意事项 2.接口示例 3.接口的特征 三.抽象类和接口的区别 一.抽象类 1.抽象类 1.1抽象类的定义 在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类没有包含足够多的信息来描述一个具体的对

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

    目录 前言 一.抽象类是什么? 二.接口是什么? 三.抽象类和接口的异同点 总结 前言 本文简单介绍抽象类,接口以及它们的异同点,另附简单的代码举例. 一.抽象类是什么? 在 Java 语言中使用 abstract class 来定义抽象类.抽象类是不能被实例化的,即不能用new关键字来实例化对象.包含抽象方法的一定是抽象类,但抽象类不一定包含抽象方法.如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类.抽象类中的抽象方法的修饰符只能为public或者pr

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

    目录 一.抽象类 (一)概念 (二)抽象类和抽象方法 (三)使用抽象类的意义 二.接口 (一)概念 (二)语法 三.比较抽象类与接口 Q: 为什么有了抽象类还要接口?  Q: 如何确定在什么情况下应该使用接口,什么情况下应该使用类呢? 一.抽象类 (一)概念       在继承的层次结构中,每个新的子类都使类变得更加明确和具体.如果从一个子类向父类追溯,类就会变得更通用.更加不明确.类的设计应该确保父类包含它的子类的共同特征.有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例.这样的类

  • java中的抽象类和接口定义与用法详解

    目录 一.抽象类 1.什么叫抽象类? 2.抽象类的特点: 3.成员特点: 二.接口 1.接口是什么? 2.接口的特点 3.接口的组成成员 4.类与抽象的关系: 5.抽象类与接口的区别: 一.抽象类 1.什么叫抽象类? 例如在生活中我们都把狗和猫归为动物着一类中,但当只说动物时,我们是不知道是猫还是狗还是其他的.所以动物就是所谓的抽象类,猫和狗则是具体的类了.因此在Java中,一个没有方法体的方法应该定义为抽象类,而类中有抽象方法,则必须为抽象类. 2.抽象类的特点: 抽象类与抽象方法必须用abs

  • Java中的抽象类和接口你了解吗

    目录 抽象类 什么是抽象类? 抽象类属于什么类型? 抽象类怎么定义? 抽象类是干什么的? 什么是抽象方法? 非抽象类继承抽象类 抽象类总结 接口 接口的基础语法 接口的实现 接口和多态联合使用 继承和实现同时出现 接口在开发中的作用 类型和类型之间的关系 总结 抽象类 什么是抽象类? 类和类之间有共同特征,将这些共同特征提取出来进一步抽象,就形成了抽象类.由于类是不存在的,所以抽象类无法创建对象. 抽象类属于什么类型? 抽象类也属于引用数据类型. 抽象类怎么定义? [修饰符列表] abstrac

  • 一文搞懂Java中的抽象类和接口到底是什么

    目录 什么是抽象类 抽象类在实现多态中的意义 接口是什么 通过接口实现多态

  • Java由浅入深通关抽象类与接口下

    目录 1.对象的比较 1.1 Comparable<T> 1.2 Comparator<T> 2.克隆对象 2.1 Cloneable 2.2 深拷贝和浅拷贝 3.Object类 3.1 equals 3.2 toString 本篇介绍在对对象进行比较和克隆操作的时候会使用的接口,然后介绍一个类:Object 在Java中Object类默认是所有类的父类,里面有一些常用的方法会介绍 1.对象的比较 两个对象要进行比较之前,我们首先需要确定依据什么来进行比较,对象中的成员变量那么多,

  • Java由浅入深通关抽象类与接口上

    目录 1.抽象类 1.1抽象类概念 1.2抽象方法 1.3抽象类的细节 2.接口 2.1接口概念 2.2接口的细节 1.抽象类 1.1抽象类概念 我们都知道对象是通过类来进行描述的,但是不是说所有的类都是用来描述对象的 一个类的类中没有足够的信息来描述一个具体的对象,这便是抽象类 抽象类的关键字:abstract 1.2抽象方法 首先还是看看之前写过的类: class Plant { String name; String source; String genus; public void tr

  • Java基础巩固抽象类与接口详解

    目录 1.抽象类 1.1.什么是抽象类 1.2.抽象类的用法 1.3.抽象类特点(限制条件) 2.接口 2.1.什么是接口 2.2.接口的用法 2.3.如何使用接口 2.4.接口的特点(限制条件) 2.5.如何实现多个接口 2.6.接口于接口之间的继承关系 2.7.如何使用接口 抽象类与接口 1.抽象类 1.1.什么是抽象类 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 1.2.抽象类的用法 一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract

  • 详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(

  • java中Statement 与 PreparedStatement接口之间的关系和区别

    Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口     区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高 详解: 1.PreparedStatement:表示预编译的 SQL 语句的对象. 接口:public interface PreparedStatement extends Statement之间的继承关系    SQL 语句被预编译

  • java中的内部类内部接口用法说明

    简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. 内部类 先讲内部类,内部类就是在类中定义的类.类中的类可以看做是类的一个属性,一个属性可以是static也可以是非static的.而内部类也可以定义在类的方法中,再加上匿名类,总共有5种内部类. 静态内部类 我们在class内部定义一个static的class,如下所示: @Slf4j publi

随机推荐