继承和组合

继承

概率

实现多个对象对于同一个数据的引用,例子同外卖系统差不多!(不同的人有不同的数据对象,然而这个对象 数据 是共享的。)

格式

class Student/*夫类*/: public Person/*子类*/{
}

保存Person之中的世界内容。public类,prviate类,与protected类,使用不同的方法。


pubilc类所有的类与类里面的内容相同,protected类让private类表现出公用进行访问相关的内容。

私有成员变量不可以进行访问。

关于不同的成员变量,继承内容。就是public < protected < private。不同类的碰撞出现这个情况。

切割

进行数据的赋值返回!

只可以让子类赋值给父类,进行数据切割。

1,子类的指针可以强制性的赋值给父类的指针

2,父类的指针不可以强制赋值给子类

3,子类对象可以赋值给父类对象/指针/引用

友元关系不可以继承,可以使用frinend进行接口露出来!


作用域

子类与父类都有独立作用域。(在访问不同,限制条件不同)

子类成员与父类屏蔽同名的成员(函数,变量),叫做重定义。只可以使用多次引用进行显示访问。

但是在体系不要命名定义同名的函数变量。

父类的默认成员函数

函数(除了析构)都是先子类进行变化,然后进行父类变化。

析构函数,进行父类进行释放,然后进行子类进行释放。

静态成员

static int p

静态成员p,数据在整个体系之中只有一个(不可以创建新的一个东西!)

继承关系

单继承**:一个子类只有一个直接父类时称这个继承关系为单继承**(一个父亲)。

多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承(多个父亲)。

菱形继承

会发生数据冗余的情况!

请添加图片描述

数据存储会发生baswClass类的数据重复储存到midClass和midClass。,然后让那个数据储存到deriveClass。


通过继承可以解决数据冗余的情况。形式:

class B : virtual public A{
  
}

通过这样的方式解决问题!储存的方式变成了数据 + 偏移量(相对的地方!)
请添加图片描述

前面的是数据,后面为的偏移量。

组成

继承:人 <- 学生 ,动物 <- 狗(类似使用pubilc进行使用)。Is -a类。

白盒子,可以看见内部的东西。

组合:在类里面声明另外一个类。(与继承有区别)has -a类,黑箱复用。

可以使用组合就尽量使用组成!

### 实现继承组合的英文术语 在面向对象编程中,实现继承组合是两种重要的设计机制。以下是对这两种机制的详细解释及其对应的英文术语: #### 1. **实现继承 (Implementation Inheritance)** 实现继承是指一个类通过继承另一个类来重用其方法属性。这种机制允许子类直接访问父类中的方法字段,从而减少代码重复并提高代码复用性。在 Java 其他单继承语言中,实现继承通过 `extends` 关键字完成[^1]。 - **英文术语**: Implementation Inheritance - **描述**: 当类 A 继承自类 B 时,类 A 获得了类 B 的所有非私有方法字段。这种方式适用于需要扩展现有类功能的场景。 - **示例**: ```java class Parent { public void methodA() { System.out.println("Method A in Parent"); } } class Child extends Parent { // 子类继承父类 public void methodB() { System.out.println("Method B in Child"); } } public class Main { public static void main(String[] args) { Child child = new Child(); child.methodA(); // 调用从 Parent 继承的方法 child.methodB(); // 调用 Child 自己的方法 } } ``` #### 2. **组合 (Composition)** 组合是一种通过将一个类的对象作为另一个类的成员变量来实现代码复用的方式。与实现继承不同,组合不依赖于类层次结构,而是通过对象之间的关联关系实现功能扩展。这种方式更加灵活,并且可以避免因多层继承带来的复杂性脆弱性[^2]。 - **英文术语**: Composition - **描述**: 在组合中,一个类通过持有另一个类的实例来使用其功能。这种方式适用于需要动态调整行为或避免紧耦合的场景。 - **示例**: ```java class Component { public void operation() { System.out.println("Operation in Component"); } } class Composite { private Component component; // 持有 Component 的实例 public Composite(Component component) { this.component = component; } public void performOperation() { if (component != null) { component.operation(); // 委托调用 Component 的方法 } } } public class Main { public static void main(String[] args) { Component component = new Component(); Composite composite = new Composite(component); composite.performOperation(); // 调用 Component 的方法 } } ``` --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值