精华内容
下载资源
问答
  • 抽象类和接口区别

    万次阅读 多人点赞 2019-05-07 23:29:58
    抽象类和接口的定义: 抽象类(abstract class): 使用abstract修饰符修饰的类。(如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。) 实际点来说,一个抽象类不能实例化,因为“没有...

    抽象类和接口的定义:

    抽象类(abstract class):

    使用abstract修饰符修饰的类。(如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。

    实际点来说,一个抽象类不能实例化,因为“没有包含足够多的信息来描述一个具体的对象”。但仍然拥有普通类一样的定义。依然可以在类的实体(直白点就是能在{}里面)定义成员变量,成员方法,构造方法等。

    抽象方法:只声明,不实现。具体的实现由继承它的子类来实现。实际点就是:被abstract修饰的方法,只有方法名没有方法实现,具体的实现要由子类实现。方法名后面直接跟一个分号,而不是花括号。例如:public abstract int A();

    一个类中含有抽象方法(被abstract修饰),那么这个类必须被声明为抽象类(被abstract修饰)。

     

    接口(interface):

    定义:接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。从定义上看,接口是个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)。

    接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。实现某个接口的类必须在类中实现该接口的全部方法。虽然接口内的方法都是抽象的(和抽象方法很像,没有实现)但是不需要abstract关键字。

    1. 接口中没有构造方式(因为接口不是类)
    2. 接口中的方法必须是抽象的(不能实现)
    3. 接口中除了static、final变量,不能有其他变量
    4. 接口支持多继承(一个类可以实现多个接口)

     

    抽象类和接口的区别:

     

    1.默认的实现方法:

    (1)抽象类可以有默认的方法实现完全是抽象的。

    抽象类中可以有已经实现了的方法,也可以有被abstract修饰的方法(抽象方法),因为存在抽象方法,所以该类必须是抽象类。

    (2)接口根本不存在方法的实现。

    但是接口要求只能包含抽象方法,抽象方法是指没有实现的方法。接口就根本不能存在方法的实现。

     

    2.子类使用的关键词不一样:

    (1)实现抽象类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。

    抽象类虽然不能实例化来使用,但是可以被继承,让子类来具体实现父类的所有抽象方法。但是如果子类将抽象方法没有全部实现,就必须把自己也修饰成抽象类,交于继承它的子类来完成实现。以此类推,直到没有抽象函数。

    (2)子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现。

    接口的实现,通过implements关键字。实现该接口的类,必须把接口中的所有方法给实现。不能再推给下一代。(和抽象类相比,抽象类是将梦想传给家族,一代一代去完成。那么接口就是掌门人找大师兄来完成帮派的鸿星伟业,这时候就只有一次希望,要么有能力就实现,没能力就不要接。

     

    3.是否有构造器:

    (1)抽象类可以有构造器

    抽象类是属于类,享有类的所有特性(但是不能实例化),当然包括类的构造方法,也就是构造器。

    (2)接口不能有构造器

    接口是所有抽象方法的集合,注意,是集合,不是类。当然没有构造方法一说,更别提什么构造器了。

     

    4.可使用的修饰符:

    (1)抽象方法可以有public、protected和default这些修饰符 

    抽象类的目的就是被继承,抽象方法就是为了被重写,所以肯定不能用private修饰符,肯定是可以用public的。但是protected和default也是可以的。

     

    (2)接口方法默认修饰符是public。你不可以使用其它修饰符。

    接口就有且只有一个public修饰。(感觉抽象类像小儿子各种耍无赖,接口就像私生子,说什么只能是什么)

     

    5.速度方面:

    (1)抽象方法比接口速度要快抽象方法是小儿子,从小吃的好所以跑的快

    (2)接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。接口是私生子,从小日子苦,营养不良

     

    6.增加新方法对子类的影响:

    (1)如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。

    抽象类可以有一些非抽象方法的存在,这些方法被称为默认实现。如果添加一个默认实现方法(不能是抽象方法),就不需要在子类中去实现,所以继承这个抽象类的子类无须改动。

    如果你往接口中添加方法,那么你必须改变实现该接口的类。

    (2)接口中只能添加抽象方法,当你添加了抽象方法,实现该接口的类就必须实现这个新添加的方法。

    因为,定义中说的很清楚,接口的实现必须实现所有的方法。所有,当然包括新添加的方法。

     

    7.子类能继承的数量:

    抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。

    java在类的继承上并没有多继承。抽象类属于类,所以可以被继承。但子类只能继承一个父类。

    java为了实现多继承,使用了接口。一个类可以实现多个接口。继承就好比生了孩子,只能有一个爹,但是这个孩子可以学语文,学数学,学英语等等很多东西,而语文、数学、英语就相当于接口。

     

    总的来说,因为java中抽象类只有单继承,接口就可以实现多继承。

    展开全文
  • 抽象类和接口 区别分析抽象类和接口 区别分析
  • java(7): 抽象类和接口区别

    千次阅读 2019-01-04 15:43:05
    先笼统的说一下抽象类和接口区别以及我们在实际使用中怎么去选择使用接口还是抽象类? 首先我们要明白,抽象类是对类的抽象,而接口是对行为的抽象。了解了这个概念后一切都好办。抽象类是对整个类整体进行抽象,...

        先笼统的说一下抽象类和接口的区别以及我们在实际使用中怎么去选择使用接口还是抽象类?
        首先我们要明白,抽象类是对类的抽象,而接口是对行为的抽象。了解了这个概念后一切都好办。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口只是对类的局部(行为)进行抽象。举个例子,猫和狗都是动物,此时我们可以把猫和狗共有的属性和行为抽取出来定义一个抽象的类---Animal 类,然后 Dog 和 Cat 类就可以继承 Animal 类,然后实现自己各自的行为和属性,它们与 Animal 存在 "is-a" 的关系;但是接口仅仅是对行为的抽象,比如鸟和飞机都会飞,但是他们飞的行为不一样,我们就可以定义一个 fly 的接口,然后鸟和飞机都可以实现此接口来完成飞的动作,但是本身鸟和飞机之间并没有什么必然的联系,接口只是定义一个实现该行为的规范而已。

    具体区别:
    1.  抽象类通过 abstract 关键字来定义,然后子类通过 extends 继承该抽象类后并实现相应抽象方法;接口通过 interface 关键字来定义,子类通过 implements 来实现该接口中的所有方法。
    2. 抽象类中的抽象方法可以使用 public、protected、default 修饰符;接口中的抽象方法默认并只能是 public,并且成员变量默认为 public static final 修饰的,所以我们可以直接通过 接口名.成员变量  使用它。
    3. 抽象类中允许有非抽象的方法和成员变量包括构造方法; 接口中的方法全是抽象的,不能有方法的实现。
    4. 子类只能通过继承来实现抽象类,由于 java 中的单继承特性,就导致只能继承一个抽象类;但是子类可以实现一个或多个接口,在一定程度上,这就解决了由于单继承特性所带来的问题。
    5. 从作用上来看,抽象类是为了把相同的东西提取出来,即重用;接口是为了把程序进行模块化,可以降低程序的耦合。

    展开全文
  • Java编程基础之抽象类和接口区别

    千次阅读 2019-03-25 19:28:22
    1、什么是抽象类?在java面向对象的概念中,抽象类是没有过多信息描述具体的对象的一类。看下面的代码,分析抽象类有哪些特点: public abstract class AbstractDemo { /** * 抽象类定义的关键字 abstract, 有...

    1、什么是抽象类?在java面向对象的概念中,抽象类是没有过多信息描述具体的对象的一类。看下面的代码,分析抽象类有哪些特点:

    public abstract class AbstractDemo {
    	/**
    	 * 抽象类定义的关键字 abstract, 有抽象方法的类一定是抽象类 如果一个类没有描述具体事务的个体就是抽象类,
    	 * 抽象类里可以是抽象方法,非抽象方法
    	 * 
    	 */
    	int speed;
    
    	// 抽象方法没有方法体,只有方法名
    	public abstract void increaseSpeed(int initspeed);
    
    	// 构造方法,
    	public AbstractDemo(int startSpeed) {
    		speed = startSpeed;
    		System.out.println("这是抽象类的构造方法");
    	}
    
    	// 普通方法
    	public void show(int endspeed) {
    		System.out.println("抽象类的普通方法~");
    	}
    }

    2、如何使用抽象类的方法?想使用抽象类就要先继承它,但是不能创建对象,不能实例化:

    public class UseAbstractDemo extends AbstractDemo {
    
    	/**
    	 * 抽象类不能被实例化、不能创建对象,可以被继承extends 子类继承父类,可以调用父类的任何方法, 但是必须实现父类未实现的抽象方法
    	 * 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口
    	 * 
    	 * @param startSpeed
    	 */
    	// 构造方法继承抽象类的方法
    	public UseAbstractDemo(int startSpeed) {
    		super(startSpeed);
    
    		// 抽象不能被实例化。可以通过super关键字,访问其他方法
    		super.show(23);
    		// TODO Auto-generated constructor stub
    	}
    
    	// 重写抽象类的抽象方法
    	@Override
    	public void increaseSpeed(int initspeed) {
    		// TODO Auto-generated method stub
    		System.out.println("重写父类的方法");
    	}
    
    }

    3、子类继承父类,调用父类方法,测试代码如下:

    //  子类继承父类,调用所有方法,必须实现父类有的抽象方法
    	public static void main(String [] args){
    		UseAbstractDemo ua=new UseAbstractDemo(1);
    		ua.increaseSpeed(12);
    	}

    4、什么是接口?在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

    public interface InterfaceDemo1 {
    	/**
    	 * 接口是抽象方法的集合,一个类通过继承接口来继承接口的抽象方法 接口无法被实例化,但是可以被实现,
    	 * 
    	 * 与抽象类的区别 : 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
    	 * 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
    	 * 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
    	 * 一个类只能继承一个抽象类,而一个类却可以实现多个接口,实现接口重现抽象的方法;
    	 * 
    	 * 
    	 */
    	// public static final固定写法,可以不写
    	public static final int i = 4;
    	String str = "我是接口!";
    
    	// 抽象方法必须是抽象类,public abstract 也是固定写法,可以不写;
    	public abstract void show1(String str);
    
    	// 所以下面这些都是抽象方法
    	public void show2();;
    
    	void show3();
    }

    5、再来创建第二个接口:

    public interface InterfaceDemo2 {
    //	定义一个也是抽象类
    	String str="我是接口2";
    	
    	void show4();
    }

    6、现在再创建一个类实现上面两个接口的抽象方法,即接口的实现:

    public class ImplementDemo implements InterfaceDemo1, InterfaceDemo2 {
    
    	@Override
    	public void show1(String str) {
    		// TODO Auto-generated method stub
    		System.out.println("这是接口1抽象方法的实现");
    	}
    
    	// 实现接口的方法,需要实现接口所有的抽象类方法,
    
    	@Override
    	public void show1(String str) {
    		// TODO Auto-generated method stub
    		System.out.println("这是接口2抽象方法的实现");
    	}
    
    // 下面抽象方法的空实现,但是必须要有方法体
    	@Override
    	public void show2() {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void show3() {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    

    7、测试一下,上面的类实现的接口的方法:

    public class Demo {
    
    	public static void main(String[] args) {
    		// 多态,同样的对象有两种类型,继承或是实现的关系
    		InterfaceDemo1 myInterface = new ImplementDemo();
    		ImplementDemo myIneterface2 = new ImplementDemo();
    		myInterface.show1("interface接口类型(也可以是实现接口的类)  变量名=new 实现接口的类");
    		myIneterface2.show1("str");
    	}
    
    }

    展开全文
  • 抽象类和接口区别及应用场景

    千次阅读 2018-03-25 23:22:36
    1.抽象类是对类的抽象(包括了属性对应的行为). 接口是对某一个行为动作的抽象。 2.抽象类只能单继承,接口可以实现多继承。 3.接口中定义的方法不能实现,即使不显示的将方法声明为public,他们也是 public。 ...

    区别如下:

    1.抽象类是对类的抽象(包括了属性和对应的行为).
      接口是对某一个行为动作的抽象。
    2.抽象类只能单继承,接口可以实现多继承。
    3.接口中定义的方法不能实现,即使不显示的将方法声明为public,他们也是
    public。
      抽象类中的方法可以部分实现。
    4.抽象类中可以被任意权限修饰符修饰,static/非static,final/非final,
    可以有抽象方法和非抽象方法。
      接口中的域默认的为public  static final。即不可更改的动作。   
    

    interface的应用场合
    A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。
    B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
    C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
    D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

    abstract class的应用场合
    一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
    A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
    B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
    C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

    部分参考:https://blog.csdn.net/xcbeyond/article/details/7667733

    展开全文
  • 抽象类:使用abstract修饰,使用时,子类用extends继承! 接口:使用interface修饰,使用时,具体实现类用implements实现! 按照类中所有元素,层次的区分两者: ...(1)抽象类可以有普通成员变量,接口不...
  • 抽象类和接口,抽象类和接口区别

    千次阅读 多人点赞 2016-11-21 17:28:05
    其实愿意去真正了解抽象类和接口是因为看源代码后的动力。因为接口用的太多了,对于java开发来说,现在只是一个小学 生。 看了很多大牛的文章还有自己老师的总结,然后自己总结了一些。有不对的请指出,因为是个...
  • 抽象类和接口区别

    千次阅读 2020-07-11 14:35:11
    抽象类和接口一、抽象类二、接口三、抽象类和接口区别 一、抽象类 1、什么是抽象类? 答:类类之间具有共同特征,将这些共同特征提取出来,形成抽象类。 2、类可以实例化对象吗? 答:由于类本身不存在,因此抽象...
  • 抽象类和接口区别以及抽象类和接口的使用场景

    千次阅读 多人点赞 2019-05-30 18:15:44
    一、抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。 1.抽象方法...
  • 抽象类和接口区别及使用场景

    千次阅读 多人点赞 2018-07-09 10:22:53
    抽象类和接口区别及使用场景 1.1 抽象类 1.2 接口 1.3 抽象类和接口区别 1.3.1 语法层面上的区别 1.3.2 设计层面上的区别 1.4 什么时候使用抽象类和接口 抽象类和接口区别及使用场景 1.1 抽象类 在...
  • php抽象类和接口区别

    万次阅读 2018-04-04 12:49:04
    php抽象类和接口区别 tags:抽象类 接口 抽象类和接口 php 引言:这是一个面试经常被问到的问题,也是一个经典问题。我们尽量引用官方权威的说明或者经过实验来证明本文所说的内容准确性。 抽象类 ...
  • java抽象类和普通类的区别 1.抽象类不能被实例化。 2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。...抽象类和接口区别 Abstract Class ...
  • Java中抽象类和接口区别

    万次阅读 多人点赞 2019-02-07 14:10:07
    在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口...
  • java抽象类和接口最本质的区别接口里不能实现方法--接口中的方法全是抽象方法。抽象类中可实现方法--抽象类中的方法可以不是抽象方法,下文给大家简单介绍下,需要的的朋友参考下
  • 继承抽象类和接口区别

    千次阅读 2018-07-17 17:32:18
     抽象类和接口都是在一定程度上体现到了java的多态特性。那么在使用场景上,它们有什么区别呢? 在语法方面:   抽象类:  1.由abstract关键词修饰的类称之为抽象类。   2.抽象类中没有实现的方法称之为...
  • 抽象类和接口有什么区别

    千次阅读 2020-08-10 16:14:50
    抽象类和接口有什么区别 最本质的区别,抽象类是一个类,而接口是另一种类型 接口用来对功能进行抽象,而抽象类用来对类型结构进行抽象 抽象类中可以有正常方法(对方法进行实现)也可以有抽象方法(只做声明),而在接口...
  • Java中抽象类接口区别

    千次阅读 2017-12-20 09:18:19
    抽象类抽象类是无法实例化的特殊类。所以问题是为什么我们需要一个不能被实例化的类,抽象类只能是子类(继承自)。换句话说,它只允许其他类继承它,但不能实例化。优点是它为所有子类执行特定的层次结构。简而言之...
  • 抽象类和接口区别与应用场景

    万次阅读 多人点赞 2017-07-22 15:32:31
    接口和抽象类有什么区别 在应用场景下,选择使用接口和抽象类的依据是什么? 一、抽象类和接口在语法上的异同: 1、相同点 都不能被实例化 2、不同点  抽象类中不一定都是抽象方法,但是接口中的方法必须...
  • typeScript 抽象类和接口区别

    千次阅读 2021-03-10 11:06:21
    抽象类和接口区别? 1.什么是抽象类 抽象类,顾名思义,即类的抽象,从面向对象的角度来想,世界万物都可以用类来定义(男人是个类,女人是个类,奔驰是个类,宝马也是个类),那么抽象类又是类的抽象,举个例子,...
  • 抽象类(abstract class)和接口(interface)的概念是面向对象设计中常用的概念, 也是比较容易混淆的概念. 在这里, 我提出一种区分它们的思路

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 788,138
精华内容 315,255
关键字:

抽象类和接口的区别