抽象类和接口的区别

本文详细阐述了接口和抽象类在概念和定义上的区别,包括接口的多继承特性、抽象类的单一继承以及它们在实现功能上的侧重点。抽象类用于表示对象的本质,而接口则关注对象能做什么。示例展示了如何定义和实现抽象类与接口,并强调了在关注行为抽象时使用接口,关注本质抽象时使用抽象类的重要性。
摘要由CSDN通过智能技术生成

1.概念的区别

抽象方法指只有功能声明,没有功能主体实现的方法。具有抽象方法的类一定为抽象类

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

接口的特点:

接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。
· 一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。
· 一个JAVA库中接口的例子是:Comparator 接口,这个接口代表了“能够进行比较”这种能力,任何类只要实现了这个Comparator接口的话,这个类也具备了“比较”这种能力,那么就可以用来进行排序操作了。

· 如用关键字interface,你可以从类的实现中抽象一个类的接口。也就是说,用interface,你可以指定一个类必须做什么,而不是规定它如何去做。

2.定义的区别

1)抽象类&抽象方法的定义

基本语法:

public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
public abstract class 类名 {
}

具体使用方法:

//员工 
public abstract class Employee{
	public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}

//manager
public class Teacher extends Employee {
	public void work() {
		System.out.println("正在赋予权限");
	}
}

//customer
public class Assistant extends Employee {
	public void work() {
		System.out.println("正在使用该系统");
	}
}

//开发人员
public class Manager extends Employee {
	public void work() {
		System.out.println("正在维护此系统");
	}
}

2)接口的定义

一个简单的接口:

interface in1{
//public,static and final
    final int a = 10;
//public and abstract
    void display();
}
    

用implement关键字实现这个接口:

class testClass implements in1{
 public void display(){
    System.out.println("Geek");
    }
}

产生实例的方法:

    1.实现接口的方法

interface USB {
    void read();

    void write();
}
class YouPan implements USB {
    @Override
    public void read() {
        System.out.println("U盘正在通过USB功能读取数据");
    }
    @Override
    public void write() {
        System.out.println("U盘正在通过USB功能写入数据");
    }
}

   2.具体实现

public class Main {
    public static void main(String[] args) {
        //生成一个实现可USB接口(标准)的U盘对象
        YouPan youPan = new YouPan();
        //调用U盘的read( )方法读取数据
        youPan.read();
        //调用U盘的write( )方法写入数据
        youPan.write();
        //生成一个实现可USB接口(标准)的键盘对象
        JianPan jianPan = new JianPan();
        //调用键盘的read( )方法读取数据
        jianPan.read();
        //调用键盘的write( )方法写入数据
        jianPan.write();
    }
}

使用接口类型的引用指向一个实现了该接口的对象:

public class Main {
    public static void main(String[] args) {
        //USB接口类引用可以指向一个实现了USB接口的对象
        USB youPan = new YouPan();
        //调用U盘的read( )方法读取数据
        youPan.read();
        //调用U盘的write( )方法写入数据
        youPan.write();
        //USB接口类引用可以指向一个实现了USB接口的对象
        USB jianPan = new JianPan();
        //调用键盘的read( )方法读取数据
        jianPan.read();
        //调用键盘的write( )方法写入数据
        jianPan.write();
    }
}            

3.总结

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.

所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

————————————————
版权声明:本文为CSDN博主「冯立彬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fenglibing/article/details/2745123

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值