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』

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在这个实验中,主要涉及到了Java中的接口抽象类的概念和使用。引用\[1\]中给出了一个名为StudentInterface的接口类,其中定义了两个方法setFee()和getFee(),用于设置和获取学费。引用\[2\]中描述了一个实验的目的和内容,其中涉及到了设计一个扩展自抽象类GeometricObject的Triangle类,并实现该类。同时还需要编写一个测试程序,根据用户的输入创建一个Triangle对象,并显示其面积、周长、颜色以及是否被填充。引用\[3\]中定义了一个抽象类Shape,其中包含一个抽象方法getArea(),并从Shape类派生出了Rectangle和Circle类,这两个类都实现了getArea()方法来计算对象的面积。整个实验的目的是通过设计和使用抽象类接口,理解接口继承和多态的概念,并进行相应的编程实现。 #### 引用[.reference_title] - *1* *3* [Java基础 实验四 抽象类接口](https://blog.csdn.net/y_dd6011/article/details/86372416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java实验8《抽象类接口》](https://blog.csdn.net/qq_39564555/article/details/97267562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mculover666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值