Java基础_12 | 抽象类和接口

1.抽象类和抽象方法

1.1.为什么需要抽象类

  • Java中使用抽象类是为了更好的对类进行分类。

抽象类通常用来作为一个类族最顶层的父类,表示该类族所有事物的共性,用底层的类表示具体事物,比如在现实生活中有苹果类、西瓜类等等,这些具体的类都可以抽象为“水果类”。

1.2.语法规则

抽象类是专门设计为子类继承的类,通常都包括一个或多个抽象方法,根据继承抽象类的子类的实际情况,由子类完成其抽象方法的代码。

  • 抽象方法
    • 没有方法体的方法称为抽象方法,用abstract关键词修饰;
    • 含有抽象方法的类必须声明为抽象类
  • 抽象类
    • 定义一个类的时候,在类名前加abstract关键词表示这个类是抽象类;
    • 抽象类不能创建具体的对象(比如水果类不能创建一个具体的水果);
    • 抽象类可以包含普通方法;
    • 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;

1.3.示例程序

/**
 * @brief  抽象类和抽象方法示例程序
 * @author mculvoer666
 * @date   2019/5/1
 */
/**
 * 水果类(抽象类)
 */
abstract class Fruit
{
    /**
     * 获取信息方法(抽象方法)
     */
    abstract public void get();
}
/**
 * 苹果类,继承自水果类
 */
class Apple extends Fruit
{
    /**
     * 重写父类方法get
     */
    public void get()
    {
        System.out.println("I am a Apple.");
    }
}
/**
 * 香蕉类,继承自水果类
 */
class Banana extends Fruit
{
    /**
     * 重写父类方法get
     */
    public void get()
    {
        System.out.println("I am a Banana.");
    }
}
class TestAbstract
{
    public static void main(String[] args) {
        Apple apple1 = new Apple();
        Banana banana1 = new Banana();

        apple1.get();
        banana1.get();

    }
}

执行结果如图:

2.接口

2.1.什么是接口

接口是一种特殊的抽象类。

2.2.语法规则

  • 接口的定义格式:
<访问控制符> interface <接口名>
{
	/* 变量声明 */
	/* 抽象方法声明 */
}
  • 关于接口中的变量
    • 接口里面的变量自动被赋予public static final,且必须以常量值初始化;
    • 实际开发中,接口中定义的变量作为全局变量使用;
    • 接口中变量的访问形式:<接口名>.<变量名>
    • 接口中定义的成员变量在实现类中不能被更改;
  • 关于接口中的抽象方法
    • 接口里面的方法都是抽象方法,自动被赋予public abstract
    • 接口中定义方法不能使用protected、private、static、final等关键字修饰;
  • 关于接口的访问控制符
    • 接口的访问控制符只能是public或者默认
    • 如果接口的访问控制符是public,那么其中的成员变量和抽象方法不管有没有声明权限,都是public;
  • 关于接口的继承
    • 一个接口不能继承其他的类,但是可以继承接口,并且可以继承多个接口

2.3.接口的实现

  • 接口是一种特殊的抽象类,不能实例化(创造具体的对象);
  • 接口可以被一个类实现;
  • 一个类可以实现多个接口;

一个类实现接口的语法规则如下:

class <类名> implements <接口名>
{

}

2.4.接口示例程序

/**
 * @brief  接口示例程序
 * @author mculvoer666
 * @date   2019/5/1
 */
/**
 * 水果接口
 */
interface Fruit
{
    /**
     * 获取信息方法(抽象方法)
     */
    abstract public void get();
}
/**
 * 苹果类,实现水果接口
 */
class Apple implements Fruit
{
    /**
     * 重写父类方法get
     */
    public void get()
    {
        System.out.println("I am a Apple.");
    }
}
/**
 * 香蕉类,实现水果接口
 */
class Banana implements Fruit
{
    /**
     * 重写父类方法get
     */
    public void get()
    {
        System.out.println("I am a Banana.");
    }
}
class TestInterface
{
    public static void main(String[] args) {
        Apple apple1 = new Apple();
        Banana banana1 = new Banana();

        apple1.get();
        banana1.get();

    }
}

运行结果如下:

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』

发布了208 篇原创文章 · 获赞 559 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/89737097