展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

抽象类和接口

抽象类

  • 抽象类语法:
/*
*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() {
}
}
posted @   DogLeftover  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· .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
点击右上角即可分享
微信分享提示