Java · 抽象类与接口的区别

抽象类与接口的区别

1.抽象类

在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法

1.语法 :Java中接口和抽象类的定义语法分别为interfaceabstract关键字。

2.抽象类的特点:

(1)抽象方法只有方法的声明,没有方法体

(2)抽象类不能被实例化只能被继承;

(3)包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

(4)抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

(5)一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

(6)抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

2.接口

Java中接口使用interface关键字修饰,特点为:

(1)接口可以包含变量、方法;变量被隐式指定为public static final,方法被隐式指定为public abstract(JDK1.8之前);

(2)接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

(3)一个类可以实现多个接口;

(4)JDK1.8中对接口增加了新的特性:
I、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;
II、静态方法(static method):JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。

下面展示一些 示例代码

/**
 * Java基础之接口与抽象类的区别
 * @author feng
 *	
 */

/**
 * 抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,
 * 抽象方法只有方法的声明,没有方法体。
 * 抽象类的特点:
 * 1.抽象类不能被实例化只能被继承;
 * 2.包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;
 * 3.抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;
 * 4.一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;
 * 5.抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。
 */
public abstract class SoftwareUser {

	private String name;
	private Integer age;
	
	
	public SoftwareUser() {
		
	}
	
	public SoftwareUser(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	// 抽象类中的抽象方法的修饰符只能为public或者protected,默认为public
	// 抽象方法只有方法的声明,没有方法体
	// The abstract method code in type SoftwareUser can only set a visibility modifier, one of public or protected
	//private abstract void code();  // error	
	public abstract void code1();
	protected abstract void code2();

	// 包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法
	private void eat() {
		System.out.println("敲代码是为了吃饭!");
	}
	
	public static void main(String[] args) {
		
		// 抽象类不能被实例化只能被继承 
		// Cannot instantiate the type SoftwareUser
		// SoftwareUser softwareUser = new SoftwareUser(); // error
	}
	
	
}

子类

public class WebUser extends SoftwareUser implements BigDataInterface{
	
	
	
	// 一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类
	@Override
	public void code1() {
		// TODO Auto-generated method stub
		System.out.println("code1");
	}

	@Override
	protected void code2() {
		// TODO Auto-generated method stub
		
	}

	public static void main(String[] args) {
		SoftwareUser user1 = new WebUser();
		user1.code1();
		
		WebUser user2 = new WebUser();
		user2.code1();
		
		
	}

	@Override
	public void updateByUserId() {
		// TODO Auto-generated method stub
		
	}
}

接口


/**
 * Java基础之接口与抽象类的区别
 * @author feng
 *
 */

// a、接口可以包含变量、方法;变量被隐式指定为public static final,方法被隐式指定为public abstract(JDK1.8之前);

// b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

// c、一个类可以实现多个接口;


// JDK1.8中对接口增加了新的特性:

//(1)、默认方法(default method):JDK 1.8允许给接口添加非抽象的方法实现,但必须使用default关键字修饰;
//定义了default的方法可以不被实现子类所实现,但只能被实现子类的对象调用;
//如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法;
//(2)、静态方法(static method):
//JDK 1.8中允许使用static关键字修饰一个方法,并提供实现,称为接口静态方法。
//接口静态方法只能通过接口调用(接口名.静态方法名)。
public interface BigDataInterface {

	public static final String name = "zs";
	public static final Integer age = 23;
	
	public static void eat() {
		System.out.println("大数据也要吃饭!");
	}
	
	default void run() {
		System.out.println("大数据也要跑路!");
	}
	
	void updateByUserId();
}

原文链接https://zhuanlan.zhihu.com/p/94770324

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值