08- 抽象类和接口

本文探讨了Java中的抽象类和接口,包括抽象方法、抽象类的特点与构造方法、接口的概念及其在现实生活中的应用。重点阐述了抽象类与接口的关系、接口与类的多重实现,以及接口的优势和设计原则,旨在帮助理解两者在软件设计中的作用。
摘要由CSDN通过智能技术生成

抽象类和抽象方法

猫狗案例 - 猫和狗继承了动物类

具体的类 和 抽象的类的区别
动物都有吃饭的方法 
动物都有睡觉的方法 

动物吃什么
动物怎么睡觉
	动物具体吃什么 不知道(对于动物这个类而言,就是一个抽象的类)
	某一个具体的动物 吃什么
		猫吃鱼 狗吃骨头 羊吃草 
		狗趴着睡 马站着睡 
动物这个类的睡觉的方法必须由子类动物来实现, 本身不需要实现,把本身不需要实现的方法称之为抽象方法

抽象方法 本身不需要 有方法体的方法, 就是抽象方法, 该方法不需要实现,由子类继承之后,重写实现

抽象方法所在的类就是抽象类

文具类 (抽象类)
    笔
    本
    铅笔刀
水果 (抽象类)
	苹果
	梨
	山竹

抽象语法

public abstract class fruit{
   // 抽象方法 (没有方法体 )
   public abstract void eat();
}

特点

  • 抽象类不能创建对象, 只能通过继承关系, 由子类去创建父类对象
  • 子类继承抽象类, 必须重写父类的所有抽象方法, 除非子类也是抽象类

抽象类和抽象方法关系

抽象方法所在的类 必须是抽象类

抽象类 可以没有抽象方法

有豪宅的人 一定是有钱人
有钱人 不一定有豪宅

抽象类中是拥有构造方法的

抽象类中可以 有普通属性,和普通方法

构造是给属性赋值使用的 , 抽象类有普通属性, 所以有给这些属性赋值的构造方法

接口

生活中的接口

键盘 鼠标 音响 U盘 是具有USB 功能的 设备

本身都具有自己的父类

键盘 继承 键盘类 (外设类) USB的功能 使用接口来描述 (接口也是一个功能)

接口从某种角度上来讲, 可以看做是一个特殊的抽象类,但是采用和抽象类完全不同的语法来表示, 两者的设计理念不同!
接口是功能的拓展

语法

public interface 接口名{
    成员属性;
    方法;
}

注意点

1- 和抽象类不同, 使用 interface 定义, 访问修饰符 必须是public
2- 成员属性必须是常量
-  成员方法必须是抽象方法
3- 实现接口使用 implements 来实现
4- 一个类可以实现多个接口

案例

// 定义USB 接口
public interface UsbInterface {
    // 常量 (默认修饰符 为 public static final)
    double SIZE = 1.5;
    // 具体的执行流程
    // 成员方法必须是抽象方法 (默认修饰符 public abstract)
    void service();
}
public class UDisk implements UsbInterface{
    @Override
    public void service() {
        System.out.println("链接USB 接口 开始传输数据!");
    }
}
/**
 * USB  小风扇 实现了 USB的接口
 * 必须重写 接口中的所有抽象方法
 */
public class UsbFan implements UsbInterface{

    @Override
    public void service() {
        System.out.println("链接USB 获取电流 风扇开始转动!");
    }
}
public class Demo {
    public static void main(String[] args) {
        // 使用父接口 来接收子类对象 , 也是多态的一种实现方式
        UsbInterface uDisk = new UDisk();
        uDisk.service();
        UsbInterface uFan = new UsbFan();
        uFan.service();
    }
}

接口与类之间的关系

接口和接口之间可以相互继承

public interface A {
    void m1();
}
// 接口之间相互继承
public interface B extends A{
}

接口与类之间, 多实现

public class C  implements A,B{}

在继承的同时, 实现多个接口

public class D extends C implements A,B {}

类与类之间 相互继承

接口和抽象类之间的对比

1- 接口是一个特殊的抽象类, 要比抽象类更抽象

2- 属性和方法
抽象类中可以有非抽象方法, 可以有普通成员属性
接口中 只有常量,抽象方法 

3- 构造
抽象类存在构造方法, 接口中没有构造方法

4- 编程思想
抽象类 (is a) 是一个 - 猫继承了动物类, 猫是一个动物
接口 (have a) 有什么 - 鼠标实现了USB , 鼠标有USB的功能 (功能拓展)

5- 继承与实现关系
抽象类 继承关系, 只能单继承
接口 实现关系, 支持子类多实现

案例

猫狗案例
动物
	猫
	狗
/***************************************/
动物
	会英语的猫
	不会英语的猫
	会英语的狗
	不会英语的狗

接口的优势

  • 可扩展性
  • 避免单继承的弊端

设计原则

  1. 摘取代码中变化的行为, 形成接口
  2. 多用组合, 少用继承 (避免代码冗余)
  3. 针对接口编程, 不依赖于具体实现
  4. 开闭原则, 针对扩展开放,针对修改关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值