抽象类和接口对比

博客主页:GGood_Name的博客
博主介绍:一位只会wawa的acmer 和 写bug的后端选手!
专栏地址:Java学习专栏
期待各位朋友的互动,欢迎大家点评学习


抽象类

抽象类介绍

  • 抽象类使用abstract修饰类
  • 抽象类当中可以包含普通类所能包含的成员
  • 抽象类和普通类不一样的是,抽象类当中可以包含抽象方法
 abstract class Color{
    String name;
    int cnt;
    public abstract void red();
    public void green();
}

抽象类使用的注意事项和细节讨论

  • 抽象类不能被实例化
public class AbstractDetail01 {
    public static void main(String[] args) {
        //抽象类,不能被实例化
        Color p = new Color ();//错误用法
    }
}
  • 抽象类不一定要包含abstract方法,即抽象类可以没有abstract方法
//抽象类可以没有abstract方法,还可以有实现的方法。
abstract class A {
    public void hi() {
        System.out.println("hi");
    }
}
  • 一旦类包含了abstract方法,则这个类必须为抽象类
//错误
class B {
    public abstract void hi();
}
  • 抽象类可以拥有任意成员(抽象类的本质还是一个类),比如:非抽象方法、构造器、静态属性等等

//抽象类的本质还是类,所以可以有类的各种成员
abstract class hi {
    public int a = 10;//属性
    public static  String name = "hello";//静态属性
    public void hi() {//方法
        System.out.println("hi");
    }
    public abstract void hello();//抽象方法
    public static void ok() {//静态方法
        System.out.println("ok");
    }
}
  • 抽象方法不能有主体(方法体)
  • 如果一个类继承了一个抽象类,则它必须实现那个抽象类的所有抽象方法,除非它自己也声明为abstract类
  • 抽象方法不能使用private、final 和 static 来修饰,因为这些关键字和重写是相违背的
 abstract class hi {
    public /*这里不能使用private/final/static*/  abstract void hi();//抽象方法
}

接口

接口介绍

在Java中,接口可以看成是:多个类的公共规范 (一些没有实现的方法,封装到一起)

  • 使用interface来修饰接口
  • 接口当中的成员方法不能有具体的实现
interface Hi{
	int name;
	public void hello();
}
class SayHi implements Hi{
	@Override
    public void hello() {
    }
}

接口是更加抽象的抽象的类;
抽象类里的方法可以有方法体;
接口里的所有方法都没有方法体(JDK7.0之前)。接口体现了程序设计的多态和高内聚低耦合的设计思想。

接口使用的注意事项和细节讨论

  • 接口不能实例化
  • 接口中所有的方法是public方法,接口中的抽象方法,可以不用abstract修饰
interface IA{
	void a();//实际上是public abstract void a();
}

  • 一个普通类实现接口,就必须将该接口的所有方法都实现
  • 一个抽象类实现接口,可以不用实现接口的方法
  • 接口中的属性,只能是 final 的,而且是 public static final 修饰符
  • 一个类同时可以实现多个接口(理解为接口是对于Java单继承机制的一种补充)
interface B {
    int n = 10; 
    void b();
}
interface C {
    void c();
}
class A implements B,C {//Pig类同时实现了接口IB和IC
    @Override
    public void b() {
    }
    @Override
    public void c() {
    }
}

接口和抽象类使用对比

接口实现场景

  • 实现类和它的抽象类之前具有 “is-a” 的关系, 接口只需要满足 like - a 的关系
    继承是一个 "是不是"的关系,而 接口 实现则是 "有没有"的关系。

抽象类实现场景

  • 父类只知道其子类应该包含怎样的方法,不能准确知道这些子类如何实现这些方法的情况下,使用抽象类

区别对比

在这里插入图片描述

文末结束!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GGood_Name

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值