多态

多态是Java中比较重要的概念。
继承:从字面理解就是一种层次联结模型。有些说法说是,鼓励类的重用,更加符合新手的说法,就是。在现有的类的基础上(基类),创建的新类继承这个基类,从而拥有基类的属性和自己的属性。

多态意味着“不同的形式”。在面向对象的设计中,我们拥有从基类中继承的不同子类,以及使用接口的不同形式,不同的动态绑定方法。

动态绑定

class Task{
    void f(){
        System.out.println("a");
    }
}

public class Person extends Task{
    void f(){
    System.out.println("b");
}
    public static void mian(String[] args){
        Task t = new Person();
    }   
}

Task t = new Person() . 会调用谁的方法呢?
你可以去运行一次,绝对是Person的方法,我们用的Task 的引用去实现的Person类,最终确实实现的Person的方法,虽然Person继承的Task方法,但是已经覆盖了。在这个过程中,对于Java来说,编译的时候并不会报问题,所以没有出错。他之所以可以运行是因为,Java具备一种动态绑定的行为,在运行时根据对象的类型进行绑定,他不同于C的前期绑定,Java在编译时并不知道我们具体需要调用哪个对象,但是方法调用机制可以找到正确的方法体,便于在运行期能够找到正确的方法体,返回正确的行为。

Java的多态都是通过这种动态绑定实现的。

关于继承的设计

继承不得不说是一种比较巧妙的东西,继承现有的类实现新的类,来建立新类。确实比较精妙,但若是首先考虑使用继承来做,无疑会加重我们的负担,官方也建议使用组合的方式来产生动态的行为改变,这会更加爱灵活。
设计原则:用继承来表达行为间的差异,并用字段表达状态上的变化。(来自 Thinking in Java)

is-a 关系

采用“纯粹”的方式来创建继承层次结构似乎是一种最好的方式,基类只有经过已经建立的方法才可以在子类中覆盖。这种被称为“is-a”关系,是因为一个类已经确定了它应该是什么,继承可以确保所有的子类具备基类的所有接口,而且绝对不会少。也可以认为这是一种纯替代,因为子类可以完全替代基类。

子类可以进行向上转型,因为子类和基类拥有相同的接口,不需要知道正在处理的对象的确切类型,这一切都是通过多态实现的。

只要开始考虑这样设计方式,那么就只有这种is-a的纯粹的方式最佳,Java似乎也在允许我们这样做,这更像是is-like-a的放方式,因为子类可以看作就是一个基类,他拥有基类所有的特征,还有自己的特性。

向上转型有一种缺点,那就是会丧失子类的特性,因为基类不能范访问到子类的特性,也没有子类的特性的接口。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值