abstract , interface, 和final

本文详细解析Java中的final、abstract和interface的概念及其使用方式,包括final修饰属性、方法、类,abstract修饰方法和类,interface的定义与实现,以及它们之间的区别和应用场景。

final 

final 的意思就是最终的,不能被改变的。

 

final 修饰属性,表示属性不能被修改,  例如 public final int i =8;  假如一个类修改 i =8,着也是不允许的。

     final 可以修饰形参  例如 这个方法的定义 public void speak(final int i){  }  

 

final 修饰方法,表示这个方法不能被重写。

final 修饰类,这个类不能被继承。

 

 

abstract修饰类 是抽象类,抽象类不能被实例化,一个抽象类可以有普通方法,可以没有抽象方法。

 

abstract 修饰方法为抽象方法,public abstract class +类名  ,一个类中只要有抽象方法,这个类必须声明为抽象类,抽象类没有方法体,是用来被重写的。

 

abstract 不能修饰属性。

 

abstract 类就是继承用的,不继承这个类就没有什么用处。如果一个类继承了abstract类,就必须重写父类中的抽象方法,一般方法可以不重写。

 

 

interface

 

interface其实也是一个类,只不过这个类特殊,重新给定义了一个新的类型为 interface,接口类中是不可能有构造方法的。

 

interface类中的属性的修饰必须而且只能为 public static final 修饰。

 

interface类中的方法都没有方法体,而且这些方法修饰符必须为 public void。其实这些方法都是abstract方法。

 

interface 可以像类的继承一样,一个类实现一个接口,就必须重写这个类中的所有方法,接口和实现接口类中有  多态 的存在。

 

接口和接口之间可以继承,一个接口可以继承另外一个接口!!

 

 

 

基于实时迭代的数值鲁棒NMPC双模稳定预测模型(Matlab代码实现)内容概要:本文介绍了基于实时迭代的数值鲁棒非线性模型预测控制(NMPC)双模稳定预测模型的研究与Matlab代码实现,重点在于提升系统在存在不确定性与扰动情况下的控制性能与稳定性。该模型结合实时迭代优化机制,增强了传统NMPC的数值鲁棒性,并通过双模控制策略兼顾动态响应与稳态精度,适用于复杂非线性系统的预测控制问题。文中还列举了多个相关技术方向的应用案例,涵盖电力系统、路径规划、信号处理、机器学习等多个领域,展示了该方法的广泛适用性与工程价值。; 适合人群:具备一定控制理论基础Matlab编程能力,从事自动化、电气工程、智能制造、机器人控制等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于非线性系统的高性能预测控制设计,如电力系统调度、无人机控制、机器人轨迹跟踪等;②解决存在模型不确定性、外部扰动下的系统稳定控制问题;③通过Matlab仿真验证控制算法的有效性与鲁棒性,支撑科研论文复现与工程原型开发。; 阅读建议:建议读者结合提供的Matlab代码进行实践,重点关注NMPC的实时迭代机制与双模切换逻辑的设计细节,同时参考文中列举的相关研究方向拓展应用场景,强化对数值鲁棒性与系统稳定性之间平衡的理解。
### abstract class interface 的区别 #### 1. 定义方式 抽象类(`abstract class`)是一种特殊的类,它允许定义方法签名以及部分实现甚至完全实现的方法。而接口(`interface`)则是一个纯抽象的概念,在某些编程语言中仅能包含方法声明常量字段[^2]。 ```java // 抽象类示例 public abstract class Animal { public abstract void makeSound(); // 抽象方法 public void sleep() { // 非抽象方法 System.out.println("Sleeping..."); } } // 接口示例 public interface Movable { void move(); // 默认为公共抽象方法 } ``` #### 2. 方法实现能力 在许多现代编程语言中,如 Java 8 及以上版本,接口可以提供默认方法(`default methods`),从而允许其实现一些逻辑功能。然而,默认情况下,接口中的方法仍然是未被具体化的。相比之下,抽象类可以直接提供完整的实现[^3]。 ```java // 使用默认方法的接口 public interface Flyable { default void fly() { System.out.println("Flying..."); } } // 抽象类中的完整实现 public abstract class Bird { public final void layEggs() { System.out.println("Laying eggs..."); } } ``` #### 3. 多重继承支持 由于一个类只能继承自单一父类,因此如果需要模拟多重继承,则通常会采用接口的方式。多个接口能够同时由同一个类实现,这使得设计更加灵活[^4]。 ```java class Superhero implements Flyable, Movable { @Override public void move() { System.out.println("Moving..."); } @Override public void fly() { System.out.println("Super flying!"); } } ``` #### 4. 成员变量特性 接口不允许存在实例成员变量;它们只可拥有静态最终类型的属性(即常量)。相反地,抽象类既可以有普通的成员变量也可以具备静态或者动态初始化器。 ```java // 正确的接口常量定义 public interface Constants { int MAX_LIMIT = 100; } // 错误尝试给接口添加非常量数据成员 public interface WrongExample { String name; // 编译错误:必须显式指定final修饰符并赋初值 } ``` --- ### 使用场景分析 当考虑何时选用 `abstract class` 或者 `interface` 来构建软件组件时,需依据实际需求来决定: - **倾向于使用抽象类的情况** - 当希望共享代码片段的时候; - 如果基类型本身应该具有某种行为表现而非纯粹作为模板存在的话; - **更适于选择接口的情形** - 对于那些仅仅关心操作契约而不涉及任何特定算法细节的对象建模过程而言更为合适; - 若要求允许多种不同类型之间形成关联关系以便达成共同目标的情况下尤为适用[^1]。 --- ### 总结表格对比 | 特性 | Abstract Class | Interface | |---------------------|----------------------------------------|---------------------------------------| | 是否可含构造函数 | 是 | 否 | | 能否直接创建对象 | 不可以 | 绝对不可以 | | 支持多继承 | 单一继承 | 支持 | | 提供默认实现 | 可以 | 自 JDK 8 开始可以通过 `default` 关键字实现 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值