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

Java—接口和抽象类

一、接口

Java 接口(Interface) 是面向对象编程中用于定义行为规范的核心机制。接口通过抽象方法约定“能做什么”,而不关心“如何做”,从而实现多态代码解耦

1.1 接口的特点

  • 接口用interface定义
  • 接口中全为抽象方法
  • 默认用public abstract修饰,protected、private 不可以修饰  因为要实现继承
  • 接口中的变量都是被static final修饰的  全部都是和类相关的属性
  • 接口没有构造方法,如果要用使用多态实现
  • 实现接口使用implements关键字,实现接口必须要实现接口中所有方法  如果不实现接口中所有方法,那么该类为抽象类
  • 接口与类之间是实现关系  可以支持多实现 public abstract class AnmalIntImpl implements AnimalInt,B,C
  • 接口与接口之间是继承关系  使用extends关键字表示继承,可以实现多继承  public interface AnimalInt extends B,C
  • 类可以既实现接口  同时继承其他类  public abstract class AnmalIntImpl extends Demo implements AnimalInt,B,C
  • Java8之后,接口中可以有默认方法(有实现),用default修饰即可

1.2 代码实现

//B.java
public interface B {void DB();  //隐式 public abstract   实现类必须覆写 DB()
}//C.java
public interface C {void CC();  //隐式 public abstract   实现类必须覆写 CC()
}//Demo.java
public class Demo {}//Animal.java   抽象类
//继承是单继承,只能有一个父亲
public abstract class Animal {//四个抽象方法public abstract void eat();	public abstract void run();public abstract void jump();public abstract void sleep();
}
//抽象类无法实例化;子类必须实现所有抽象方法,或自身声明为 abstract//AnimalInt.java
public interface AnimalInt extends B,C{  // 多继承接口static final int a = 5;  //常量void eat();	//默认用public abstract修饰public abstract void run();public abstract void jump();// 默认方法(Java 8+)default void sleep() {System.out.println("xxx");}
}//AnimalIntImpl.java  抽象类:无需实现任何接口方法(由子类完成),可添加自己的抽象/具体方法
public abstract class AnmalIntImpl extends Demo implements AnimalInt,B,C{}

1.3 测试

public class Test extends AnmalIntImpl{@Overridepublic void eat() {System.out.println("eat");}@Overridepublic void run() {System.out.println("run");}@Overridepublic void jump() {System.out.println("jump");}@Overridepublic void DB() {System.out.println("DB");}@Overridepublic void CC() {System.out.println("CC");}public static void main(String[] args) {Test test = new Test();test.CC();test.DB();test.eat();test.jump();test.run();test.sleep();System.out.println(AnimalInt.a);}}

1.4  运行结果

二、抽象类

抽象类(Abstract Class) 是面向对象编程中一种特殊的类,用于定义部分实现的模板,强制子类完成特定行为。抽象类介于普通类和接口之间,既包含抽象方法(无实现)也可包含具体方法(有实现)。

2.1 抽象类的特点

  • 抽象——提取共性
  • 形象——描述完成后脑海里出现的具体的样子
  • abstract  抽象类(为了提取共性)不允许直接new,即不可实例化
  • 不允许直接new自己,只能通过多态的形式使用
  • 抽象方法的目的:为了让子类重写
  • abstract修饰且没有函数体的方法
  • 抽象方法(需子类实现)必须存在于抽象类中,非抽象类不能有抽象方法
  • 抽象类中可以有具体方法,抽象类中可以没有抽象方法
  • private和abstract关键字不能同时用-->private修饰的方法子类不可见
  • static和abstract关键字不能同时用-->static是针对类的,abstract是对象层次的
  • 抽象类里可以有构造方法,目的是在子类初始化前先初始化父类
  • 子类将继承抽象类,如果不想实现抽象类的抽象方法,那么该类必须是抽象类
  • 如果子类也是抽象类,可以不用实现父类的抽象方法
  • 子类只能继承一个抽象类(与接口的多继承互补)

2.2 代码实现

//Animal.java
public abstract class Animal {public abstract void move();
}//Brid.java
public class Brid extends Animal{public void move() {System.out.println("飞");}
}//Dog.java
public class Dog extends Animal{public void move() {System.out.println("跑");}
}

2.3  测试及运行结果

public class Test {public static void main(String[] args) {Animal aa = new Dog();aa.move();}
}

 

三、接口与抽象类的区别 

  • 接口与抽象类的区别
  • 接口中所有的方法默认族是public,是抽象的。接口中的方法不能有实现(Java8之后,接口的方法可以有实现  使用default修饰)
  • 抽象类可以有非抽象的方法
  • 接口中的变量默认是final类型,抽象类里不一定
  • 一个类可以实现多个接口,但是最多只能继承一个抽象类
  • 接口和抽象类都不能使用new来实例化,但是抽象类有构造方法而接口没有
  • 从设计层面来讲,抽象类是对事物的抽象(抽象类里可以有行为和属性),接口是对行为的抽象(接口里只有行为,没有属性)

http://www.xdnf.cn/news/6197.html

相关文章:

  • WordPress 文章和页面:它们的区别是什么?
  • Pomelo知识框架
  • Python爬虫之品牌口碑数据抓取
  • 识别硬盘驱动器的接口类型,及其与计算机连接的方式
  • 碎片笔记|AI生成图像溯源方法源码复现经验(持续更新中……)
  • 解放双手的鼠标自动点击软件
  • R语言学习--Day02--实战经验反馈
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的智慧路灯控制器技术方案
  • 高压开关/断路器机械特性试验的目的及设备
  • [python] python静态方法,类方法,实例方法实现及其区别
  • 【沉浸式求职学习day39】【双指针算法题】
  • 公链开发及其配套设施:钱包与区块链浏览器
  • 【Python】杂乱-[代码]Python 输出/打印列表(list)的方法
  • 三子棋设计
  • C#上位机RS485通信控制变频器
  • 3、ubantu系统docker常用命令
  • Centos 上安装Klish(clish)的编译和测试总结
  • NixOS 系统深度解析
  • Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯
  • Apache Pulsar 消息、流、存储的融合
  • 【Bootstrap V4系列】学习入门教程之 组件-导航条(Navbar)
  • MQTT详细介绍
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-A. PostgreSQL常用函数速查表
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的智能快递分拣机技术方案‌
  • 时序数据库IoTDB分布式系统监控基础概述
  • 小白成长之路-文件和目录内容检索处理(二)
  • 【C++重载操作符与转换】纯虚函数
  • 尚硅谷阳哥JVM
  • 智能工具协同赋能STEM教育科研|探索LLM大语言模型和数学软件Maple的创新实践
  • 2025年城市建设与交通运输国际会议(ICUCT 2025)