第六节 抽象类与接口

一、抽象类

用 abstract 修饰的类,称为抽象类

抽象类的作用:在实际开发中,对于某些功能能需求具体的实现方法不确定时,但是这些功能又必须让子类去实现,此时可以将这些功能定义成抽象类,等后期子类进行实现,从而提高程序的扩充性。(当必须强制性让子类去自己实现某个方法时,可以使用抽象类和抽象方法

比如:下面的Animal动物类,动物就是一个抽象的概念,动物有很多类型,此处不知道就是哪种类型public        abstract        void        eat ( )

总结:

  1. 被abstract修饰的方法,称为抽象方法;(抽象方法不能有方法体,即无大括号)
  2. 普通类中,不能有抽象方法;(如果一个类中有抽象方法,那么这个类必定是抽象类
  3. 抽象类中可以有构造方法,但不能直接创建对象,必须通过子类创建;
    1. 注:抽象类定义出来的方法就是为了给其他类继承。
  4. 抽象类中既可以有抽象方法,也可以有非抽象方法;
  5. 抽象类也可继承抽象类,此种继承不需要实现父类的抽象方法;
  6. 普通类继承抽象类,就需要实现抽象类中所有的抽象方法;
  7. 继承具有传递性,如果抽象类有多层继承关系,有多少抽象方法,子类就需要实现多少。

建议:如果有哪些行为(方法)必须要让子类去做的话,可以把这些行为(方法)完成抽象的,这样的话,子类就必须得实现这些行为(方法)。

/**
 *  动物抽象类
 *  用abstract关键字修饰的类,表示一种抽象的类型
 */
public abstract class Animal {
    public String name = "Animal";
    /**
     *  抽象方法
     *      用abstract修饰的方法,表示一种抽象的行为(只知道要做一件事,但还不知道具体怎么做)
     *    注意:1.抽象方法没有方法体(没有{ }大括号)
     */
    public abstract void eat();

    public abstract boolean say();

    /**
     *  抽象类中既可以有抽象方法,也可以有非抽象方法
     */
    public void die(){

    }
    
    //构造方法
    public Animal() {

    }

    public static void main(String[] args) {
        //2.抽象类不能直接创建对象,必须通过子类创建;
        //Animal a = new Animal() ;//报错
        Animal a = new Dog() ;//有了子类后,就可以创建对象
    }
}

/**
 *  如果继承的类是一个抽象类,那么就要实现抽象类中的所有方法
 *  Dog类继承Animal类,那么就要实现Animal抽象类中的所有抽象方法
 */
public class Dog extends Animal {
    public String name = "Dog~";

    //4.必须要写eat和say方法 继承抽象类,需要实现抽象类中的所有方法。
    @Override
    public void eat() {
        System.out.println("旺旺,吃骨头了~~");
    }

    @Override
    public boolean say() {
        return true;
    }
}

二、接口

interface修饰(重点掌握)

接口:没有具体的定义,也没有具体的行为,用来制定规则。

生活中常见的接口:USB接口、插座。

public        interface        Cat {  }定义一个接口Car

注意:

  1. 接口中的所有方法默认都是public  abstract修饰的,也就是抽象方法;
  2. 接口中不能有实现的方法(具体的方法),除了jdk1.8可以定义default修饰的方法;
  3. 实现接口使用的是implements关键字;
  4. 实现接口就必须实现接口中所有的抽象方法;
  5. 接口不能直接创建对象,必须通过实现类去创建对象;
  6. 一个类刻意有多个接口,中间用“  ,”隔开;
  7. 接口不能实现接口;
  8. 接口可以继承接口,而且可以继承多个接口,中间用“  ,”隔开;
  9. 接口中的属性都默认都是public static final修饰的,是一个常量。
/**
 *  画图的接口
 */
public interface DrawInterface {
    //9接口中没有构造方法
//    public DrawInterface(){
//
//    }//报错

    //1.接口中的方法都是抽象的 方法前面会加abstract,只是在接口中abstract省略掉了
    public void draw();//2.接口中不能有实现的方法(具体的方法)
//    public abstract void draw();

    public static void main(String[] args) {
        //5.接口不能直接new对象,必须通过实现类去创建
//        DrawInterface d1 = new DrawInterface();//报错

        DrawInterface d1 = new Si();
        d1.draw();

        DrawInterface d2 = new Zheng();
        d2.draw();
    }
}

/**
 * 擦除接口
 */
//接口不能实现接口
//接口可以继承接口,而且可以继承多个接口,中间用 “ ,”隔开
public interface DeleteInterface extends DrawInterface{
}

/**
 *  正方形
 */
public class Zheng implements DrawInterface {
    @Override
    public void draw() {
        System.out.println("绘制正方形");
    }
}

/**
 *  四边形
 */
public class Si implements DrawInterface{
    @Override
    public void draw() {
        System.out.println("绘制四边形");
    }
}

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我爱南乔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值