博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java编程细节总结(六):抽象类是什么,接口又是什么?——详解抽象类与接口的区别
阅读量:3917 次
发布时间:2019-05-23

本文共 1731 字,大约阅读时间需要 5 分钟。

在进行抽象类和接口区别之前,我们先要明白什么是抽象类,什么是接口。


一、什么是抽象类?

      关于这个问题之前,我们必须要明白子类继承超类的关系,子类会继承超类(父类)的所有方法,甚至可以重写父类的方法。那么有这个基础就好解释抽象类了。

      抽象类是一个只有超类或者用作子类的超类拥有的特性。这样可以很直白的说明了,只有父亲拥有抽象类,子类不能拥有,所以这就限制了父类抽象化了不能被实例化,而子类可以实例化对象。

              

由如图所示

如果子类继承了抽象类的父类,只有子类可以进行实例化,同时实例化后的对象可以调用它实现父类的方法。可以总结:父类使用抽象abstract关键字来修饰,抽象方法必须写在抽象类里,且继承该父类的子类必须实现父类的方法(方法重写)。

//抽象父类public abstract class Parent  {	private int sum;	public abstract void sum_data();//抽象方法,没有实现	}
//继承抽象类的子类public class children extends Parent{	public static void main(String[] args) {		// TODO Auto-generated method stub			children c = new children();			c.sum_data();			Parent p = new Parent() ;//此处报错,抽象类不能被实例化	}	@Override	public void sum_data() {		// TODO Auto-generated method stub		int data = 0 ;		data +=1;		System.out.println(data);	}//覆盖父类抽象方法,方法重写	}

二、什么是接口?

   接口就是一堆的方法的特征,没有具体的实现,仅仅是特征。它包含了所有的要实现的方法,要想实现这 些方法可以在不同的类中实现它,这就能控制接口方法的实现,也就展示给人们具有不同样的行为java没有多继承,所以采用多接口来实现多种方法。

    这是很重要的,我们希望在java的个个结构方便编写,在实现方法时候不能总是依赖于类中的方法,所有就有了接口。(这里强调,接口不是类,它是所有方法的特征集合。)

  请看接口的定义:

public interface openmethod {		int age();}

 

这里有一些接口知识点:1)接口必须是public类型的

                                       2)接口申明常量时,就会加public static final默认类型

                                       3)接口也可以被其他子类接口继承

 

接口的调用方法:

public class children implements openmethod {//implement关键字调用	public int age() {		// TODO Auto-generated method stub		return 10;	}//必须写出接口方法,可以对应的实现其中的接口方法	public static void main(String[] args) {		children c =new children();				System.out.println(c.age());}	}

三、接口和抽象类的区别

其实看了很明显了,接口是一堆没有实现的方法,它不是类,所以在实现接口的时候要把所有的方法都实现,但是可以根据自己需要进行重写方法,而抽象类只能是实现有关键字abstract修饰的方法,且有一个相同特征就是接口不可以被实例化,抽象类也不能被实例化。默认方法,接口不能拥有默认方法实现,但是抽象类可以写默认方法实现。修饰符中,抽象类可以是public private default等,但是接口只有public。抽象方法可以有构造器,接口不能有,接口只能拥有方法的创建,不能被实现(jdk1.8之前。)

jdk1.8后接口有默认方法和静态方法,但是我们不建议用,因为接口就像作用一个方法堆的形式,它最好就是用来提供我们服务的,我们怎么去用它就取决于我们。

转载地址:http://bntrn.baihongyu.com/

你可能感兴趣的文章
被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
查看>>
ASP.NET Core使用HostingStartup增强启动操作
查看>>
结合控制台程序和K8S的CronJob完成定时任务
查看>>
WPF开发的实用小工具 - 快捷悬浮菜单
查看>>
.Net orm 开源项目 FreeSql 2.0.0
查看>>
IdentityServer4系列 | 简化模式
查看>>
小试YARP
查看>>
如何使用 C# 中的 HashSet
查看>>
api-hook,更轻量的接口测试工具
查看>>
一个情怀引发的生产事故(续)
查看>>
如何在 C# 中使用 RabbitMQ
查看>>
一套标准的ASP.NET Core容器化应用日志收集分析方案
查看>>
如何使用 C# 扩展方法
查看>>
C#如何回到主线程,如何在委托指定线程执行
查看>>
服务器重新部署踩坑记
查看>>
.NET应用程序安全操作概述
查看>>
C# WPF:把文件给我拖进来!!!
查看>>
.NET5发布了,腾讯招聘点名要求精通MySQL,而不是SQLServer!
查看>>
让 CefSharp.WinForms 应用程序同时支持32位(x86)和64位(x64)的解决方案
查看>>
大会线上同步直播, 来不到现场也可以线上看直播,以及参会秘籍
查看>>