“抽象和接口”你真的懂吗?

一、抽象


  • 抽象 abstract

在代码中,主要指的是抽象类,是指将类变抽象,如何抽象? 主要是将方法变抽象方法

1.1 抽象类语法

  • 抽象类需要有abstract修饰
  • 抽象类中可以有抽象方法,也可以没有抽象方法,也可以有正常方法
    • 但是有抽象方法的类的一定是抽象类
  • 抽象方法是需要加abstract,且不能写方法体
  • 抽象类中可以有构造方法,但是不能通过new调用创建对象
  • 抽象类主要用来被子类继承的
    • 子类要么 将子类也变成抽象类
    • 要么 就实现(重写)父类抽象方法
父类
public abstract class Animal {

    int age;

    // 抽象方法没有方法体
    public abstract void eat();

    // 普通方法
    public void move(){
        System.out.println("动物移动" );
    }
    // 可以有构造方法
    public Animal(){
        System.out.println("Animal()" );
    }
}
子类
public class Dog extends Animal{ // 继承抽象类

    // 子类构造方法
    public Dog() {
        System.out.println("Dog()" );
    }

    // 重写抽象方法
    @Override
    public void eat() {
        System.out.println("狗吃骨头" );
    }
}
测试
public class TestAbstract {

    public static void main(String[] args) {
		// 抽象类不能通过new创建对象
        // new Animal()
        
        // 创建子类对象时,发现会调用抽象父类构造方法执行,即创建父类对象
        Dog dog = new Dog( );
        dog.eat();
    }

}

1.2 抽象类的作用


  • 作用1: 主要是让子类继承
  • 作用2: 抽象类虽然不能创建对象,但是当做父类引用指向子类对象,即在多态中使用
   		// 父抽象类当做引用 指向 子类对象
        Animal animal = new Dog();
        animal.eat();

1.3 深入理解


  • 发现不要抽象类也可以完成这些题,改成抽象类,也可以完成对应的效果!!

  • 那么,到底为什么需要设计成抽象呢?

    • 原因: 设计成抽象类,使用时就会有语法限制,继承抽象类必须强制重写抽象方法,更好满足多态

1.4 该如何用


将来我们编程时,关于抽象该怎么办?

  • 一方面: 你去用别人的抽象类
    • 抽象类无法创建对象,想要用,就得继承抽象类
    • 重写抽象方法
    • 像多态一样,使用它就可以
  • 一方面: 你要不要设计成抽象类?
    • 要不要将类设计成抽象,参考下面这句话
      • 抽象差异化,具体共同点
    • 当你在设计程序时,如果发现很多类中有相同的重复的方法,就可以将方法抽取到父类,子类继承后可以直接使用
    • 所谓"具体共同点",大家都共同需要使用一样的方法,那么就将该方法具体编写好,放在父类,子类继承后可以直接使用
    • 当你在设计程序时,如果发现很多类中有相同的方法签名,但是运行效果却不一样,就可以将方法抽取到父类,设计成抽象方法,子类继承后,就会重写该方法
    • 所谓"抽象差异化",子类中方法签名一样,执行不一样的方法,将这个设计成抽象方法

二、接口

2.1 语法介绍


java数据类型:

  • 基本类型
  • 引用类型: 数组,类,接口

接口不是类

接口是一种特殊的java文件,比抽象类还抽象…

接口的属性特征

在这里插入图片描述

接口的方法特征

在这里插入图片描述

/*
 * 1.接口不是类,不使用class修饰,而使用interface
 * 2.接口中没有属性/变量,所有属性都是公开的静态常量
 *  即默认都被 public static final修饰
 * 3.接口中没有正常方法,所有方法都是抽象的
 *   默认都被public abstract修饰
 * 4.接口中没有构造方法,不能创建对象  
 */
public interface USB {
    public final static double Length = 1;
    
    public abstract void chuanshu() ;
}

接口主要是用来让子类实现(implements)的,并且可以实现多个接口

在这里插入图片描述
在这里插入图片描述

接口可以继承接口,并且可以多继承,但是不要和类搞混,类只能单继承!!!

在这里插入图片描述

/**
 *
 * @desc 1 子类实现接口要么子类变抽象类,要么就要重写(实现)全部抽象方法
 * 2 类可以实现多个接口
 * 3 类可以继承类的同时再去实现接口
 */
public class UDisk extends Electronic implements USB , Disk {
    
}
接口语法总结:
  • 接口不是类,使用interface
  • 接口中没有变量,默认都是静态常量
  • 接口中没有正常方法,默认都是抽象方法
  • 接口中没有构造方法,不能创建
  • 接口可以继承接口,且允许多继承
子类实现接口
  • 子类可以实现多个接口
  • 实现接口就必须重写所有的抽象方法,否则子类变为抽象类
  • 子类可以在继承的同时去实现接口

2.2 使用技巧


  • 接口主要是被子类实现,可以当做父引用指向子类对象 --> 即多态

2.3 接口的理解


  • 目前,发现这些使用抽象也可以写,使用接口也可以写,甚至不用任何抽象接口也能写,那么如何选择使用哪个技术?

  • 抽象类,是类,类是表示一类具有相同属性和行为的对象的几乎,换句话类能表示一个具体的实例.即类侧重于描述一类东西

  • 接口不是类,主要在于描述一些规范,或者说是一种能力,接口侧重于描述规范或者是约定

三、每日一练:接口多态练习


设计程序 :

  • 电脑类的属性USB接口数组 : 有3个usb插口
  • 电脑类的功能 :
      1. 通过接口插入外设 (u盘,麦克风,键盘等)
        addUSB(USB usb) {
        }
      1. 开机
        要求: 电脑开机前,先启动外设
      1. 关机
        要求: 电脑关机前,先关闭外设
  • 外设类(u盘,麦克风,键盘等)
    • 功能 : 启动 关闭
    • USB接口
    • 定义usb设备的统一功能
      开启() 关闭()
  • 效果 :
    • 创建电脑对象,能插入外设,调用方法电脑开机,电脑开机前 外设启动,
    • 电脑关机前,外设先关闭

UML类图

在这里插入图片描述

参考代码


最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值