给零基础讲透:Java核心概念
父类/子类/继承 • 抽象类/接口 • 高层模块/底层模块说明本节内容主要讲清楚关于父类/子类/继承 • 抽象类/接口 • 高层模块/聚合这些概念为后续软件设计原则与模式知识奠定基础。一、父类、子类、继承核心中的核心1.你可以把“类”理解成“事物的模板”比如:父类(也叫超类/基类):就像“手机”这个通用模板所有手机都有“打电话、发短信”的功能还有”品牌、价格”这些属性;-子类(也叫派生类):就是具体的手机比如“苹果手机”“华为手机”它们都属于“手机”所以能直接用父类的“打电话、发短信”功能(不用重新造)还能加自己的特色功能(比如苹果的 Face ID、华为的鸿蒙系统);继承:就是“苹果手机继承了手机的所有特性”子类“继承”父类的所有属性和方法不用重复写代码就像你继承了父母的某些特征一样。2、我们来看一段极简的代码验证一下我们刚才的理解。这里定义了一个父类Phone里面有品牌、价格两个属性还有打电话、发短信两个方法。然后我们定义了两个子类IPhone和HuaweiPhone它们都使用extends关键字继承了Phone类。这样IPhone和HuaweiPhone就自动拥有了Phone类的所有属性和方法同时还可以定义自己独有的方法比如faceID和hongmeng。这就是继承的好处代码复用避免重复劳动。3、核心要点继承用关键字 extends Java 里子类只能继承1个父类(比如手机不能同时继承“手机”和“电脑”):子类能“复用”父类的代码不用重复写“打电话”这种通用功能,子类可以加自己的属性/方法实现“通用 个性化”。二、抽象类不完整的父类模板生活场景手机充电的困境需求共性所有手机都需要“充电”但接口不同Lightning/Type-C。传统痛点父类无法预知所有子类的具体实现方式写死逻辑会导致僵化。核心概念抽象类的定义只声明不实现父类定义抽象方法如“充电”但不写具体代码强制子类去实现。“半成品”模板抽象类保留通用逻辑将差异化的部分留给子类填充实现代码复用。代码示例// 抽象类定义abstractclassPhone{// 通用方法实现publicvoidcall(){System.out.println(打电话);}// 抽象方法强制子类实现publicabstractvoidcharge();}/子类1IPhoneclassIPhoneextendsPhone{Overridepublicvoidcharge(){System.out.println(Lightning接口);}}// 子类2HuaweiPhone (同理实现Type-C)4 核心要点关键字定义使用abstract class定义抽象类使用abstract定义抽象方法。不能实例化抽象类是“半成品”不能直接 new 对象只能作为父类被子类继承。必须实现子类继承抽象类后必须实现所有抽象方法除非子类本身也是抽象类。核心作用提取子类的“通用部分”把“差异化部分”留空让子类实现实现代码复用。三、接口纯粹的行为约定生活中的例子行为的抽象手机 (Mobile)不同的硬件设备但具备相同的“上网”行为电脑 (Computer)接口定义了“能做什么”而非“是什么”平板 (Pad)只要实现了“可上网”接口就必须具备上网能力核心概念一份契约签署契约 (Implement)一旦实现了某个接口就必须遵守接口中定义的所有约定即实现所有方法。无关身份 (Irrelevant)接口不关心你具体是什么类只关心你是否具备该行为能力。代码示例实现// 接口定义interfaceCanSurfInternet{voidsurf();}// 手机实现接口classIPhoneimplementsCanSurfInternet{publicvoidsurf(){System.out.println(用5G上网);}}核心要点关键字定义使用interface定义接口类通过implements关键字实现接口。不可实例化接口本身不能直接new 对象只能指向其实现类的实例对象。支持多实现弥补单继承的局限Java类虽然只能继承1个父类但可以实现多个接口。核心作用定义“行为标准”解耦“做什么”和“怎么做”提升代码的灵活性与扩展性。四、高层模块指挥干活的老大生活例子公司架构高层模块销售部门负责核心逻辑谈单、下单只指挥“送什么、送到哪”不关心运输细节。底层模块物流团队负责具体执行送货处理“怎么送、用什么车”等底层细节。代码映射软件架构高层模块订单系统调用其他代码实现核心业务逻辑如创建订单不关心支付具体实现。底层模块支付接口被调用的代码实现具体细节如微信支付、支付宝支付的API对接。代码示例java // 高层模块订单系统核心逻辑 class OrderSystem { // 依赖抽象接口 Pay而非具体实现 public void createOrder(double money, Pay pay) { System.out.println(创建订单成功); pay.pay(money);// 调用底层模块 } } // 测试高层模块代码无需修改即可扩展 classTest { public static void main(String[] args) { OrderSystem order new OrderSystem(); order.createOrder(99.9,new WeChatPay()); order.createOrder(59.9,new AliPay()); 说明依赖抽象而非具体OrderSystem 仅依赖 Pay 接口与具体的微信或支付宝实现解耦符合开闭原则。高层模块稳定不变新增支付方式如银行卡只需新增实现类核心业务逻辑代码无需修改。灵活扩展通过接口隔离高层模块可以轻松切换不同的底层实现提升系统的灵活性。五、总结父类/子类/继承子类继承父类通用功能使用 extends 关键字支持单继承。抽象类不完整的父类模板包含通用方法与抽象方法不能实例化。接口纯粹的行为约定使用 implements 关键字支持多实现。高层模块核心逻辑层应依赖接口或抽象类而非具体的底层细节。