java的抽象类和接口的异同点

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。

抽象类

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。

abstract class A{//定义一个抽象类
	
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
	
}

使用:

package com.wz.abstractdemo;

abstract class A{//定义一个抽象类
	
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
	
}

public class TestDemo {

	public static void main(String[] args) {
		A a = new A();
	}
}

运行:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot instantiate the type A

	at com.wz.abstractdemo.TestDemo.main(TestDemo.java:15)

接口

官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。

接口(interface)是抽象方法和常量值的定义的集合。

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

接口定义举例

public interface Runner 
   int id = 1
   public void start()
   public void run()
   public void stop()    
}

两者的差别

1.语法层面上的区别

1>抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

2>抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

3>接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

4>一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2.设计层面上的区别

1>抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
java的抽象类和接口的异同点

1、接口中不能有构造函数,抽象类中可以有构造函数;
2、接口中只能有常量属性,抽象类中可以有一般属性;
3、接口中所有的方法都是public的,而抽象类中的方法可以被public、protect、default和private修饰
4、接口中所有的方法都是抽象的,不能有方法题,抽象类中可以有方法体;
5、接口中不能有静态方法(jdk1.8之后可以有静态方法,必须要有方法体),抽象类中可以有;
6、java支持多实现,但是只支持单继承;
7、抽象类中可以没有抽象方法

上一篇:Java基础-----抽象类与接口的区别


下一篇:抽象类与接口