当前位置: 首页 > news >正文

JAVA八股与代码实践----接口与抽象类的区别和用法

接口和抽象类的区别

关键字abstractinterface
实例化不能直接实例化不能直接实例化
方法可以有抽象和具体方法只能有抽象方法(Java 8+ 支持默认方法)
变量可以有普通变量只能有常量 (public static final)
继承单继承多继承
构造函数可以定义不允许定义
使用场景表示实体的共有特征定义行为的规范

抽象类:定义共同的特征(Cat和Dog都具有Animal的行为,所以可以定义一个Animal抽象类,包含动物的共同行为),比如以下代码

// 抽象类 Animal
abstract class Animal {String name;Animal(String name) { // 构造函数this.name = name;}// 抽象方法:子类必须实现abstract void makeSound();// 具体方法:所有子类共享void sleep() {System.out.println(name + " is sleeping.");}
}// 子类:狗
class Dog extends Animal {Dog(String name) {super(name);}@Overridevoid makeSound() {System.out.println(name + " says: Woof!");}
}// 子类:猫
class Cat extends Animal {Cat(String name) {super(name);}@Overridevoid makeSound() {System.out.println(name + " says: Meow!");}
}// 测试类
public class Main {public static void main(String[] args) {Dog dog = new Dog("Buddy");Cat cat = new Cat("Whiskers");dog.makeSound();dog.sleep();cat.makeSound();cat.sleep();}
}

接口:定义某种行为规范,动物的某个行为作为一个接口,在实际业务中,某个功能服务会作为一个接口,代码示例:

// 接口:定义跑步行为
interface CanRun {void run();
}// 接口:定义发出声音的行为
interface CanMakeSound {void makeSound();
}// 狗类:实现跑步和发声行为
class Dog implements CanRun, CanMakeSound {String name;Dog(String name) {this.name = name;}@Overridepublic void run() {System.out.println(name + " is running!");}@Overridepublic void makeSound() {System.out.println(name + " says: Woof!");}
}// 猫类:实现跑步和发声行为
class Cat implements CanRun, CanMakeSound {String name;Cat(String name) {this.name = name;}@Overridepublic void run() {System.out.println(name + " is running!");}@Overridepublic void makeSound() {System.out.println(name + " says: Meow!");}
}// 测试类
public class Main {public static void main(String[] args) {Dog dog = new Dog("Buddy");Cat cat = new Cat("Whiskers");dog.run();dog.makeSound();cat.run();cat.makeSound();}
}

http://www.lryc.cn/news/489576.html

相关文章:

  • 详解 【AVL树】
  • SQLite Having 子句
  • ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld
  • 实践篇:青果IP助理跨境电商的高效采集
  • 本地安装YAPI
  • pytest日志总结
  • day16
  • 医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
  • 【读书】复杂性意义结构框架——Cynefin框架
  • Python模块、迭代器与正则表达式day10
  • Hutool工具类生成二维码
  • wpf 事件转命令的方式
  • 第二十八章 TCP 客户端 服务器通信 - JOB命令示例
  • 「Mac玩转仓颉内测版19」PTA刷题篇10 - L1-010 比较大小
  • C++趣味编程玩转物联网:用树莓派Pico实现一位数码管动态显示
  • SPA 单页面深入解读:优劣势剖析及实现方法
  • 机器学习系列----关联分析
  • json数据四大加载方式
  • JavaScript 中的数组(Array)对象的内置方法
  • 网络安全之国际主流网络安全架构模型
  • 电子应用设计方案-16:智能闹钟系统方案设计
  • 【FRP 内网穿透 从0到1 那些注意事项】
  • 力扣 LRU缓存-146
  • Elasticsearch简介与实操
  • 用python将一个扫描pdf文件改成二值图片组成的pdf文件
  • Failed to start Docker Application Container Engine
  • ESLint的简单使用(js,ts,vue)
  • 实景三维赋能国土空间智慧治理
  • 树链剖分(重链剖分)
  • 幻读是什么?用什么隔离级别可以防止幻读?