Java中的抽象类与接口的简单介绍举例

Java中的抽象类与接口的简单介绍举例

定义

  • 抽象类(abstract class):
    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
  • 接口(Interface):
    在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过实现接口的方式,从而来实现接口的抽象方法。

特点

  • 抽象类
    • 在Java中抽象类表示的是一种继承关系,表示“is-a”关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口;
    • 抽象类不能实例化对象,所以抽象类必须要被继承,才能被使用;
  • 接口
    • 接口不能用于实例化对象。
    • 接口没有构造方法。
    • 接口中所有的方法必须是抽象方法。
    • 接口不能包含成员变量,除了public static final 修饰的变量。
    • 接口不是被类继承了,而是要被类实现。
    • 接口支持多重继承。
    • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

区别

  • 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
  • 类可以实现很多个接口,但是只能继承一个抽象类
  • 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
  • 抽象类可以在不提供接口方法实现的情况下实现接口。
  • Java 接口中声明的变量默认都是 final 的。抽象类可以包含非 final 的变量。
  • Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private, protected 或者是 public。
  • 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 main方法的话是可以被调用的。

示例

下面是一个接口与抽象类简单的应用之间的关系,目的是为了更好的理解抽象类与接口的关系与使用!
先定义一个狗的抽象类以及三个相关几口

  • 抽象类
/**
 *狗的抽象类
 */
public abstract class Dog {

    //狗会叫
    abstract void bark();

    //狗会跑
    abstract void run();

}
  • 接口
    1、
/**
 *具有逗比属性的狗
 */
public interface IFoolDog {

    //逗比狗会搞笑
    void funny();

}

2、

/**
 *短腿的狗
 */
public interface IShortLegDog {

    //短腿狗会卖萌
    void actiongCute();

}

3、

/**
 *...
 */
public interface IFuckDog {

    void fuck();

}
  • 接口与抽象类的实现与继承
    1、哈士奇
/**
 *会跑会叫会搞笑的哈士奇
 */
public class 哈士奇 extends Dog implements IFoolDog {

    @Override
    public void funny() {
        // do something
    }

    @Override
    void bark() {
        // do something
    }

    @Override
    void run() {
        // do something
    }

}

2、柯基

/**
 *会跑会叫会卖萌的柯基
 */
public class 柯基 extends Dog implements IShortLegDog {

    @Override
    public void actiongCute() {
        // do something
    }

    @Override
    void bark() {
        // do something
    }

    @Override
    void run() {
        // do something
    }

}

3、泰迪

/**
 *泰迪
 */
public class 泰迪 extends Dog implements IFuckDog {

    @Override
    public void fuck() {
        // do something
    }

    @Override
    void bark() {
        // do something
    }

    @Override
    void run() {
        // do something
    }

}

总结

接口与抽象类的概念看似模糊不清,其实是要分清楚他们与子类之间的关系即可。
抽象类与子类之间的关系是“is-a”关系,即“是一个“,是父与子的关系,其本质是一样的;
接口与其实现类的关系是“like-a”关系,即“像一个”,是组合关系,上述举例虽然并不能生动的表示这种关系,但重在理解类之间的关系。

Java之路-路阻且长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CC-ColdCoder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值