抽象类和多态

本文详细介绍了Java中的抽象类及其用途,包括抽象方法的概念,并深入探讨了多态性的意义及其实现方式,如方法重载、覆盖及多态参数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java抽象类
定义:没有足够的信息来描述一个具体的对象(用abstract修饰)
作用是:定义子类的共同特征。

抽象方法:类里没有方法体的方法。
抽象类里不一定有抽象方法,由抽象方法的一定是抽象类。

抽象的作用
1.桌面型对象领域,抽象类主要用来进行类型隐藏;也就是使用抽象的类型编程,但是具体运行时就可以使用具体类型
2.利用抽象的概念,能够在开发项目中创建扩展性很好的架构,优化程序。
3.抽象类,抽象方法,在软件开发过程中都是设计层面的概念,具体实现过程有程序员完成。

多态
含义:对外一种表现形式,内在有多张集体实现。
多态的具体表现: 方法的重载  方法的覆盖  多态参数(重要)
编译看左  运行看右
方法参数具有多态性:方法的形式参数类型是父类类型,而传递的升级 参数可以是任意子类的对象(可以提高代码的扩展性)
多态环境下对象造型:例如A是B的父类 向上造型:A 实例名1=new B(); 向下转型: B 实例名2 =(B)实例名1



### Java 中抽象类多态的概念及用法 #### 抽象类的定义及其特性 在 Java 中,使用 `abstract` 关键字来定义抽象类以及其中的抽象方法。抽象类不能实例化,即无法创建其对象;只有当一个类至少包含一个抽象方法时,才允许将其声明为抽象类[^2]。 ```java // 定义了一个名为Shape的抽象类,并声明了draw()作为抽象方法 abstract class Shape { public abstract void draw(); } ``` #### 实现抽象类的方式 任何继承自抽象类的具体子类都必须提供所有未实现成员函数的实际版本——也就是覆写这些抽象方法,除非该子类同样被标记成抽象类[^1]。 ```java class Circle extends Shape { @Override public void draw() { System.out.println("Drawing a circle."); } } // 如果B不是最终具体化的类,则也可以继续保持为抽象状态 abstract class A extends Shape { public abstract void draw2(); } class Rectangle extends A { @Override public void draw() { System.out.println("Drawing a rectangle."); } @Override public void draw2() { System.out.println("Additional drawing logic for subclass of A"); } } ``` #### 多态性的体现方式 通过让父类型的变量指向不同子类型的新建实体,在运行期间调用相应于实际所指派之特定型别的虚函數或覆盖版的方法,从而达到动态绑定的效果。这便是所谓的编译期静态类型检查配合执行时期动态分发机制共同作用下的面向对象编程核心概念之一 —— **多态**[^3]。 ```java public static void main(String[] args){ // 创建不同类型对象并赋予相同基类引用 Shape shapeRef; shapeRef = new Circle(); shapeRef.draw(); // 输出:"Drawing a circle." shapeRef = new Rectangle(); shapeRef.draw(); // 输出:"Drawing a rectangle." // 注意这里虽然shapeRef是Shape类型, // 但是由于真正的对象是Rectangle, // 所以会调用Rectangle里的draw() } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值