谈一谈抽象类和接口的区别

抽象类

抽象类产生

编写一个类时,会给该类定义一些方法,这些方法用来描述功能和具体的实现方式,但是分析事物时,发现共性,就会出现向上抽取,方法声明相同,但是方法功能主题不同,就可以向上抽取,之抽取方法名,不抽取方法主体,这个方法就是抽象方法。
抽象方法必须被abstract关键字修饰,被abstract关键字修饰的类就是抽象类。

抽象类&抽象方法的定义

抽象方法格式定义:

public abstract 返回值类型 方法名(参数)

抽象类定义的格式:

abstract class 类名{
	类体
}

抽象类特点

1.抽象类和抽象方法都要被abstract方法修饰,抽象方法一定要定义在抽象类中
2.抽象类不可以直接创建对象
3.只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

抽象类细节

1.抽象类是一个父类
2.抽象类中可以不定义抽象方法,不让该类创建对象,方法可以直接让子类去使用
3.子类无法继承私有方法,更不能覆盖,所以abstract和private不可以一起使用

接口

概念

接口是功能的集合,只描述所应该具备的方法,并没有具体实现,功能的定义和显示分离,优化程序设计

接口定义

接口定义时需要使用interface关键字,编译之后还是.class文件

public interface MyInterface {
    //接口中所有成员变量修饰符 public static final
    //static 静态:只要被static 修饰的成员 在外界可以直接通过
    //类名.成员调用
    //final:最终的  被final修饰的变量叫常量 一次赋值终身不变
    //接口中所有的方法的修饰符 public abstract
    public abstract void a();

}

接口中的方法均为公共访问的抽象方法
接口中无法定义普通的成员变量

类实现接口

类实现接口,在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。

接口中成员的特点

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。
2、接口中可以定义方法,方法也有固定的修饰符,public abstract
3、接口不可以创建对象。
4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

接口的多实现

Java通过接口的多实现解决了不能多继承的弊端。
不能多继承的原因:多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。
其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。(听哪个爸爸的话?)
而接口中的功能都没有方法体,由子类来明确。

类继承类同时实现接口

接口的出现避免了单继承的局限性。父类中定义的事物的基本功能。接口中定义的事物的扩展功能。

接口多继承

多个接口之间可以使用extends进行继承。

interface Fu1{
	 void show();
}
interface Fu2{
    void show1();
}
interface Fu3{
    void show2();
}
interface Zi extends Fu1,Fu2,Fu3{
    void show3();
}

在开发中如果多个接口中存在相同方法,这时若有个类实现了这些接口,那么就要实现接口中的方法,由于接口中的方法是抽象方法,子类实现后也不会发生调用的不确定性。

接口思想

1、接口的出现扩展了功能。
2、接口其实就是暴漏出来的规则。
3、接口的出现降低了耦合性,即不同类之间实现了解耦。

接口与抽象的区别

相同点:

位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都可以包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥Java的单继承)
抽象类是这个事物中应该具备的内容, 继承体系是一种 is…a关系
接口是这个事物中的额外内容,继承体系是一种 like…a关系

优先选用接口,尽量少用抽象类!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值