抽象类and接口


前言


努力复习,今天复习一下抽象类和接口


一、抽象类

1.抽象类的概念

继承可以在已有类的基础上衍生出新类,类变得越来越具体。但是如果一个类中没有足够的信息去描述这个类,它只能被继承,派生出子类,这就是抽象类

举个例子,你正在开发一款图形编辑软件,很多各式各样的形状,三角形,矩形,椭圆。。。它们是不同的,但是又属于形状这个概念。从子类向父类追溯,类就变得宽泛,抽象了,大概体会到了抽象类是啥玩意了吧。

2.创建抽象类

/*
* [public] abstract class 类名[extends 父类][implements 接口列表]
* {
*    属性声明及初始化;
*    抽象方法的声明;
*    非抽象方法声明及方法体;
* }
*
* 注:抽象类中可以有抽象方法,也可以有非抽象方法
*    抽象方法必须是无方法体的方法
*    定义抽象类 使用abstract关键字实现
* */

出了点错误欸。。。
在这里插入图片描述
原来是里面抽象方法不能写方法体,一定要记得!!!接下来写一个完整的抽象类,在下文中会用到。

//定义一个柜子的抽象类
abstract class Chest{
    double width;   //柜子的宽度
    double high;    //柜子的高度

    public void open(){
        System.out.println("柜子能打开!");
    }
    public abstract void storage();//存放东西的方法
}

3.继承抽象类

抽象类不能直接创建对象,只有被继承了才能被创建对象,继承的方式和一般的类相同,继承的类必须要重写抽象类中的所有抽象方法。
在这里插入图片描述

//定义一个柜子的抽象类
abstract class Chest{
    double width;   //柜子的宽度
    double high;    //柜子的高度

    public void open(){
        System.out.println("柜子能打开!");
    }

    public abstract void storage();//存放东西的方法

}
class Wardrobe extends Chest{
    @Override
    public void storage() {
        System.out.println("衣柜能存放衣服!");
    }
}
class Bookcase extends Chest{
    @Override
    public void storage() {
        System.out.println("书柜能放书!");
    }
}

二、接口

1.接口概念

接口是一种用于描述类对外提供功能规范的、能够多重继承、特殊的抽象类。在现实中某些问题只能需要用多重继承描述,接口的出现完美解决了java类中只能单继承的问题。

2.创建接口

/*
 * [public] interface 接口名 [extends 父类口列表]{
 *     //属性声明
 *     [public][static][final]属性类型 属性名 = 常量名;
 *     //方法声明
 *     [public][abstract]返回值类型 方法名 (参数列表)
 *}
 *注意:
 * 修饰接口的修饰符和默认修饰符
 * 接口可以是多重继承,接口只能继承接口,不能继承类
 * 属性必须是常量(有初值),方法必须是抽象的(无方法体)
 * 在接口中不使用abstract修饰的方法也是抽象方法
 * */
//定义一个圆柱体接口
public interface Cylinder {

    static final double PI = 3.14;//定义圆周率

    public double area();//计算圆柱体面积的方法
    public double bulk();//计算圆柱体体积的方法
}

3.实现接口

//实现圆柱体接口
class  TestCylinder implements Cylinder{
    double radius;
    double high;

    public TestCylinder(){
    }

    public TestCylinder(double radius, double high) {
        this.radius = radius;
        this.high = high;
    }

    @Override
    public double area() {
        return 2*PI*radius*high+PI*radius*radius*2;
    }

    @Override
    public double bulk() {
        return PI*radius*radius*high;
    }
}
// 实现多个接口
public interface AA {
    final static int a = 1;
    public void Action1();
}
interface  BB{
    final static int b = 2;
    public void Action2();
}
class MakeAA_BB implements AA,BB{

    @Override
    public void Action1() {
        System.out.println(a);
    }

    @Override
    public void Action2() {
        System.out.println(b);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值