抽象类(AbstractClass)

本文详细解释了抽象类的概念、用途及其与接口之间的主要区别。包括抽象类的特点、如何使用抽象方法指导子类的设计,以及与接口在属性、方法和结构上的不同。
/**特性
 * 用abstract修饰的类,叫做抽象类。抽象类里可以不包含抽象方法,但含有抽象方法的类,就必须是抽象类
 * 抽象类的命名前缀为:Abstract
 * 抽象类在创建对象时,需要覆盖类中的抽象方法,并且不能再将方法定义为抽象。
 * abstract方法没有方法体,所以不能与static或者synchronized一起修饰同一个方法。
 * 抽象方法就是用于被继承下去的,所以抽象方法不能修饰为private
 *
/** 抽象类的意义
 * 抽象类是天生的父类,可以明确父类的方法也可以明确子类发展的方向。修饰为abstract的方法,就表示
 * 要被子类去实现或者再次定义为abstract,但最终是会被实现的,否则毫无意义,这就是明确了子类的发展方向。
 *
/** 抽象类和接口的区别?
 * 从属性上来说,接口的属性均为公开的静态常量,而抽象类中的属性随意。
 * 从方法上来说,接口中的方法均为公开抽象的,而抽象类中的方法可以是不公开的也可以不是抽象的。
 * 从结构上来说,抽象类必须明确abstract关键字修饰,而接口是隐式修饰。
 *
/** 常见的抽象类?
 * AbstractList,AbstractSet,AbstractMap
 * @author silone
 *
 */
<think>好的,我现在需要帮用户理解DJIMainActivity与AppCompatActivity之间的继承关系。用户提供的代码示例是“abstract class DJIMainActivity extends AppCompatActivity”,所以核心是解释这个继承结构。 首先,我应该回顾Java继承的基本概念。根据引用[1],子类会继承父类的所有非私有属性和方法,私有成员是隐式继承,不能直接访问。所以DJIMainActivity作为子类,可以访问AppCompatActivity中的非私有方法和属性。 接下来,AppCompatActivity是Android支持库中的一个类,用于兼容旧版本的ActionBar等功能。用户可能想知道为什么DJIMainActivity要继承它。通常,Android中的Activity都会继承AppCompatActivity以保持兼容性。 然后,DJIMainActivity是抽象的,这意味着它可能包含抽象方法,需要子类实现。引用[2]提到抽象类可以有抽象方法,子类必须实现。所以用户可能是在DJIMainActivity中定义了一些通用逻辑,但留部分方法由子类具体实现,比如初始化操作或事件处理。 需要结合用户提供的引用,比如引用[3]中的ToastUtil,但似乎和当前问题关联不大,可能可以忽略。重点在继承关系,特别是抽象类的作用。 我应该分点解释继承关系、抽象类的作用,以及这种设计的好处。比如代码复用,强制子类实现特定方法,同时保持与Android系统的兼容性。可能还需要提到生命周期方法,如onCreate,这些可能由AppCompatActivity提供,DJIMainActivity进行扩展。 最后,用户可能想知道实际应用中的例子,比如在DJI SDK中,DJIMainActivity可能封装了无人机相关的通用逻辑,而具体Activity继承它并实现抽象方法。需要确保解释清晰,并回答相关问题,如抽象类的用途、继承带来的好处等。</think>### DJIMainActivity与AppCompatActivity的继承关系解析 #### 1. 基础继承关系 当定义$abstract\ class\ DJIMainActivity\ extends\ AppCompatActivity$时,建立了以下关系: - **直接继承**:DJIMainActivity成为AppCompatActivity的直接子类 - **抽象特性**:DJIMainActivity被声明为抽象类abstract class),意味着: - 可以包含抽象方法(需子类实现) - 不能被直接实例化 - 可以包含具体方法实现供子类复用 #### 2. 继承特性表现 根据Java继承规则[^1]: - **显式继承**:可访问AppCompatActivity中所有非私有(public/protected/default)成员 ```java // 例如可重写onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 调用父类实现 // 新增子类逻辑 } ``` - **隐式继承**:私有成员(private)仍存在于子类中,但不可直接访问 ```java // 假设AppCompatActivity有私有字段: private int mStatus; // 子类中无法直接使用mStatus,但可通过继承的getter/setter操作 ``` #### 3. 抽象类设计目的 参考抽象类设计规范[^2],这种结构通常用于: 1. **模板模式**:定义无人机应用基础框架 ```java public abstract class DJIMainActivity extends AppCompatActivity { // 定义必须实现的抽象方法 protected abstract void initFlightController(); // 提供通用实现 protected void enableObstacleAvoidance() { // 避障功能基础实现 } } ``` 2. **强制规范**:要求子类必须实现特定功能(如无人机连接、图传初始化) 3. **代码复用**:封装通用UI组件(如HUD显示、地图控件) #### 4. Android框架整合 AppCompatActivity是Android支持库的核心组件: $$ Activity \rightarrow FragmentActivity \rightarrow AppCompatActivity $$ DJIMainActivity通过继承获得: - 生命周期管理(onCreate/onStart/onResume等) - 兼容性特性(Material Design支持) - 资源管理系统 #### 5. 典型使用场景 ```java // 具体Activity继承抽象类 public class FlightControlActivity extends DJIMainActivity { @Override protected void initFlightController() { // 实现具体初始化逻辑 DJISDKManager.getInstance().registerApp(this); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 调用父类实现 setContentView(R.layout.flight_ui); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值