zoukankan      html  css  js  c++  java
  • Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征:

    继承:存在继承关系的子类和父类

    重写:子类对父类的某些方法进行重写(多态下调用的是子类重写的方法)

    父类引用指向子类对象:即向上转型,将子类的引用赋给父类的对象

    然后,我们调用的时候,就是通过父类的对象去调用方法的。但是,一想接口好像也可以实现多态,并不是抽象类才可以,我们只要多个类实现同一个接口,也可以实现多态,

    因此,转着转着,就转到了接口和抽象类的区别了。

    接口

    接口是一序列方法的声明,一序列方法特征的集合,一个接口只有方法的形状而没有方法的具体实现,接口是Java面向对象提供的一种机制。

    Java语言是一种单继承的,在类的继承中可以实现多个接口代替了多继承

    接口的申明:

    public interface 接口类名称{

    }

    抽象类

    抽象类是描述许多类的公共的地方,它是一个基类,在项目中主要用作很多类的基础类,比如对表中的增删改查,我们可以抽取一个基类来,然后让表结构的类去继承它,这样就省的我们去写那些基本的增删改查了

    抽象类的申明:

    public abstract 抽象类名称{

    }

    接口和抽象类的区别

    接口和抽象类还是有一定区别的,接口可以看做是抽象类的一种更抽象化,接口是对动作(行为)的抽象,抽象类是对类的抽象,简单的来说,就是接口注重的是方法,而抽象类注重的是属性和方法

    接口:

    方法完全抽象的,并且方法必须是public,如果写成其他的编译时会报错,如果不写,则默认方法是public abstract

    子类用implements来实现接口,子类需要实现接口中的所有方法

    接口不可以new操作符实例化一个接口,但可以声明一个接口变量

    接口可以继承一个或者多个接口

    接口可以有变量,但是这个变量是不可以变的变量,它会自动的变为public static final

    抽象类:

    可以有方法的实现,但是这个方法不是abstract方法

    子类用extends来继承抽象类,如果子类不是抽象类,则子类必须实现抽象类中的所有抽象方法,也可以实现抽象类中的非抽象方法

    抽象类中可以有构造器

    抽象类中可以有public,protected和default修饰符

    抽象类可以继承一个类和实现多个接口

    总的区别是:

    抽象类可以有构造函数,接口不可以有构造函数

    抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量

    抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰

    抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法

    抽象中的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰

    一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口

    什么时候使用接口,什么时候使用抽象类

    如果你想拥有一些方法,并且这些方法有默认实现,那么久使用抽象类

    如果你想实现多继承,那么就是用接口吧,java不支持多继承,但是可以实现多个接口

    接口主要用于模块与模块之间的调用

    抽象类主要用于当做基础类使用,即基类

  • 相关阅读:
    再见了亲爱的学生们,再见了敬爱的同事们,再见了信狮
    #if defined 和#ifdef的区别
    C# ASP.NET Core开发学生信息管理系统(二)
    modelsim与debussy联合的问题
    C#批量生成大数据量无重复随机数据的另类高效实现
    DataColumn.Caption属性应用到DataGridView.HeaderText的方法
    [转载]安装网银安全控件
    近期学习SQL Server,收藏的几个学习教程网址备忘
    asp.net根据域名查ip C#版
    asp.net 2.0教程 成员资格和角色管理
  • 原文地址:https://www.cnblogs.com/GreatKing/p/6077912.html
Copyright © 2011-2022 走看看