菜菜学习java中接口和抽象类的异同

接口和抽象类是支持抽象类定义的两种机制。

接口:如果一个抽象类的所有方法都是抽象方法,则可以把这个类用另外一种形式来定义,即接口。Java接口是一系列方法的声明,是一些方法特征的集合,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。

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


接口:

声明接口,使用关键字interface,接口中所有方法都只声明方法标识,而不去声明具体方法体,具体的方法体的实现由继承该接口的类来去实现。接口中的属性默认为Public、Static、Final。一个类实现某接口必须实现这个接口中定义的所有的抽象方法

一个简单的接口:只能有抽象方法。

public interface XiugouImp {
	
    final int zhuazi=5;//全局变量
	
	public abstract void jiaohuan();

}

使用implements关键词实现接口:

class test implements xiugouimp {

	@Override
    public void jiaohuan(){
         System.out.println("xiaosongxv");
      }

}

只有把接口的抽象方法都实现才算是这个类实现了这个接口。

抽象类:

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

那么什么叫抽象方法呢?

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

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

定义一个简单的抽象类:一定拥有抽象方法,可以拥有普通方法。

abstract class xiugou{

//定义一个抽象类必须用关键字abstract
	public void fun(){
        //普通方法:存在方法体
		System.out.println("我是普通方法~");
	}
	public abstract void biubiu();
    //抽象方法,没有方法体,有abstract关键字做修饰
	
}

实现抽象方法:

class heihei extends xiugou{//heihei类是抽象类xiugou的子类,是一个普通类

	@Override
	public void biubiu() {//强制要求覆写
		System.out.println("Hello World !");
	}
	
}

要明确:

(1)抽象类继承子类里面有明确的覆写要求,而普通类可以有选择性的来决定是否需要覆写;
(2)抽象类实际上就比普通类多了一些抽象方法而已,其他组成部分和普通类完全一样;
(3)普通类对象可以直接实例化,但抽象类的对象必须经过向上转型之后才可以得到。

public class Test {

	public static void main(String[] args) {
		xiugou a = new heihei();//向上转型
		a.biubiu();//被子类所覆写的过的方法
	}
}

接口和抽象类相同点:
(1)抽象类和接口都不能直接实例化,即创建对象。
(2)抽象类的子类(或接口的实现类),都必须对抽象类(或接口)中所列全部的抽象方法提供具体实现,才可以被实例化,否则,该类仍然为抽象类。

不同点:
(1)抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的。
(2)抽象类关键字:abstract class,接口关键字:interface。实现接口的关键字:implements,继承抽象类的关键字:extends;

(3)一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承

(4)抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类;

(5)抽象类只能被类或抽象类继承,而接口既可以被接口继承,也能被类或抽象类实现;

  (6)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时用接口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值