Java基础 多态+抽象类

本文详细介绍了Java中的多态性概念,包括其前提条件、成员访问特点以及多态带来的好处与弊端。多态允许将父类引用指向子类对象,增强了程序的扩展性,但也限制了对子类特有功能的直接访问。此外,文章还讨论了向上和向下转型,以及抽象类的相关知识,强调抽象类不能实例化,但可以作为子类的模板,提高代码复用性。

多态概述
同一个对象,在不同时刻表现出来的不同形态

举例:猫
我们可以说猫是猫:猫cat=new 猫();
我们也可以说猫是动物: 动物animal=new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态

多态的前提和体现

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象

多态中成员访问特点
(左右指的是Animal dog=new dog() )

  • 成员变量:编译看左边,执行看右边
  • 成员方法:编译看左边,执行看右边

为什么成员变量和成员方法的访问不一样呢?
因为成员方法有重写,而成员变量没有

多态的好处和弊端
多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
多态的弊端:不能使用子类的特有功能

多态中的转型

  • 向上转型

从子到父
Animal a=new Cat();
父类引用指向子类对象

  • 向下转型

从父到子
Cat c=(Cat)a;
强转
父类引用转为子类对象

抽象类

概述
一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,就必须定义为抽象类
抽象类不是具体的就不能创建对象

抽象类的特点:

  • 抽象类和抽象方法必须使用abstract关键字修饰

public abstract class 类名{}

public abstract void eat();

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能实例化
  • 实现实例化应该参照多态的方式,通过子类对象实例化,这叫抽象类多态

抽象类的子类

要么重写抽象类中的所有抽象方法
要么是抽象类

抽象类的成员特点:

  • 成员变量

可以是变量
可以是常量

  • 构造方法

有构造方法,但是不能实例化
那么,构造方法的作用是什么呢?

用于子类访问父类数据的初始化

  • 成员方法

可以有抽象方法:限定子类必须完成某些动作
也可以有非抽象方法:提高代码复用性

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
Java类的多态性和抽象类是面向对象编程的重要特性。 **多态(Polymorphism)**: 在Java中,多态允许不同类型的对象对同一消息作出响应。它主要有两种形式:方法重载(Overloading)和方法覆盖(Overriding)。方法重载是指在同一类中有多个同名方法,但参数列表不同;方法覆盖则是指子类重父类的方法,提供自己的实现。通过引用父类或接口类型的对象,可以调用其实现的具体方法,体现了“一种接口多种实现”的原则。 **抽象类(Abstract Class)**: 抽象类是一种特殊的类,它不能被实例化,主要用于定义一组共同的属性和行为。抽象类可以包含抽象方法(没有实现体的方法,仅声明了方法名和返回类型)以及非抽象方法。子类继承抽象类后,如果实现了所有的抽象方法,那么该子类就可以是具体的(non-abstract);如果没有实现所有抽象方法,则子类也需要变为抽象类。 使用场景示例: ```java abstract class Animal { // 抽象类 abstract void sound(); // 抽象方法 } class Dog extends Animal { // 具体子类 @Override void sound() { System.out.println("汪汪汪"); } } class Cat extends Animal { @Override void sound() { System.out.println("喵喵喵"); } } Dog dog = new Dog(); Cat cat = new Cat(); dog.sound(); // 输出:汪汪汪 cat.sound(); // 输出:喵喵喵 ``` 在这个例子中,`Animal`是抽象类,`Dog`和`Cat`是它的子类并实现了`sound()`方法。通过`Animal`类型的引用,我们可以调用它们各自的`sound()`实现,展示了多态性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值