抽象类和接口
抽象类
- 抽象类语法:
/* *在class之前加上abstract关键字 */ public abstract class Aminal { }
- 抽象方法:
/* *没有方法体为抽象方法,且需要在返回值类型前加上abstract关键字 */ public abstract class Aminal { abstract void eat(); abstract void sleep(); //这是普通的方法 void info(){ }; }
- 抽象类的继承:
/* *子类继承抽象类,必须重写父类的抽象方法 */ public class Dog extends Aminal0 { //重写时需加上注解标记 @Override void eat(){ System.out.println("重写eat()"); } @Override void sleep(){ System.out.println("重写sleep()"); } }
- 抽象类不能被实例化
public class Test1 { public static void main(String[] args) { //下面的语句是会报错的:'Aminal' is abstract; cannot be instantiated “动物”是抽象的;无法实例化 //Aminal aminal = new Aminal(); } }
- 抽象方法的访问修饰符只能是public protected 默认
public abstract class Aminal { public abstract void eat(); protected abstract void sleep(); abstract void fight(); //下面这条语句是会报错的:Illegal combination of modifiers: 'abstract' and 'private' 修饰语的非法组合:“抽象”和“私有” //private abstract void fight(); }
接口
- 接口的语法:
/* *使用interface关键字 */ public interface Aminal { }
- 接口内的抽象方法不能用protected private修饰
/* *编译器会自动加上public static,可省略 */ public interface Aminal { //接口内只能是抽象方法 public abstract void eat(); void sleep(); //这里会报错:Modifier 'protected' not allowed here 此处不允许修饰符“受保护” //protected void sleep(); //这里会报错:Modifier 'private' not allowed here 此处不允许使用修饰语“私人” //private void fight(); }
- 接口内定义的变量必须初始化
public interface Aminal { //接口内的变量必须初始化为常量,编译器会默认加上public final,可省略 double weight = 0; public final int height = 5; //加上default关键字,可定义defau方法;在实现该接口时不需要覆写default方法 default void fight(){ System.out.println(weight); }; }
-
接口不能被实例化
-
接口继承接口
/* *使用extends关键字,接口可继承多个接口,但不能继承类 */ public interface Dog extends Aminal,intFacTest{ }
- 实现接口
/* *使用implement关键字,可同时实现多个接口,用逗号分隔 */ public class Dog extends Aminal03 implements Aminal01,Aminal02{ //实现接口必须重写接口内的抽象方法 @Override public void eat() { } @Override public void sleep() { } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App