JavaSE基础知识分享(五)
1.JavaSE基础知识分享(一)2.JavaSE基础编程十题(数据类型、运算符、选择语句、循环语句部分)3.JavaSE基础知识分享(二)4.JavaSE基础知识分享(二)相关练习题5.JavaSE基础编程十题(数组和方法部分)6.JavaSE基础知识分享(三)7.JavaSE基础知识分享(三)相关练习题8.JavaSE基础知识分享(四)
9.JavaSE基础知识分享(五)
10.JavaSE基础知识分享(六)11.JavaSE基础知识分享(七)12.JavaSE基础知识分享(八)13.JavaSE基础知识分享(九)14.JavaSE基础知识分享(十)15.JavaSE基础知识分享(十一)16.JavaSE基础知识分享(十二)17.JavaSE基础知识分享(十三)18.JavaSE基础知识分享(十四)19.JavaSE基础知识分享(十五)写在前面
前面讲的是面向对象中的继承思想,下面让我们来看看多态这部分的内容!
Java 面向对象概念概述
多态
概述:某一个事物在不同状态下的多种状态。
实现多态的三大前提:
- 要有继承关系。
- 要有方法的重写。
- 要有父类的引用指向子类对象。
访问成员的特点:
- 成员变量:编译时看左,运行时看左。
- 成员方法:编译时看左,运行时看右。
- 静态成员方法:编译时看左,运行时看左。
多态的好处:
- 提高了程序的维护性(继承)。
- 提高了程序的扩展性(多态)。
多态的弊端:
- 在多态的形式下,无法使用子类中特有的成员方法。
- 解决方案:向下转型(例如,曹操曹植的故事)。
- 向下转型可能会遇到的问题:
ClassCastException
类转换异常,比如将Apple
变成Banana
。
抽象类
概述:用来描述现实生活中抽象的概念集合。
语法:使用 abstract
关键字进行修饰。
特点:
abstract
可以修饰类和成员方法。- 一个抽象类中,既可以存在抽象方法,也可以存在具体的实现方法。
- 当一个类中有抽象方法时,这个类必须是抽象类。
- 抽象类可以继承抽象类,可以选择性地重写方法。
- 具体的类继承抽象类时,必须重写所有的抽象方法。
- 抽象类不能实例化。
- 抽象类和类一样,子类只能继承一个父类,但可以多层继承。
接口
概述:主要用来描述事物额外的扩展功能。
关键字:interface
特点:
- 接口中只有常量,所有的变量默认使用
public static final
修饰。 - 接口中只允许出现抽象方法,所有的方法默认使用
public abstract
修饰。 - 具体类实现接口使用
implements
关键字。当具体类实现接口时,必须实现接口中所有的抽象方法。 - 一个类可以同时实现多个不同接口。
- 接口与接口之间的关系是继承关系,一个接口可以同时继承多个接口。
- 接口无法实例化。
形式参数和返回值类型的对比
形式参数:
- 类:当看到一个类作为方法参数类型时,调用时需要传递该类及其子类对象。
- 抽象类:当看到一个抽象类作为方法参数类型时,调用时需要传递继承该抽象类的具体子类对象。
- 接口:当看到一个接口作为方法参数类型时,调用时需要传递实现该接口的具体子类对象。
返回值类型:
- 类:当看到一个类作为方法的返回值类型时,方法内部应返回该类或该类的子类对象。
- 抽象类:当看到一个抽象类作为方法的返回值类型时,方法内部应返回继承该抽象类的具体子类对象。
- 接口:当看到一个接口作为方法的返回值类型时,方法内部应返回实现了该接口的具体子类对象。
包
包的划分:
- 根据功能进行划分。
- 根据角色进行划分.
导包:
- 使用
import
。 import
语句在package
和所有class
之间写。
权限修饰符
权限修饰符:
权限修饰符 | 同一类中 | 同一包子类,其他类 | 不同包子类 | 不同包其他类 |
---|---|---|---|---|
public |
√ | √ | √ | √ |
protected |
√ | √ | √ | |
默认 | √ | √ | ||
private |
√ |
总结:
public
:都可以访问。protected
:只能在子类中访问。- 默认:只能在包内访问。
private
:只能在类中访问。
内部类
成员内部类:
- 概述:将类定义在另一个类的成员位置上。
- 形式:
- 形式 1:没有使用
static
或private
关键字修饰。外部类名.内部类名 对象名 = new 外部类名().new 内部类名(); - 形式 2:使用
static
关键字修饰。外部类名.内部类名 对象名 = new 外部类名.内部类名(); - 形式 3:使用
private
关键字修饰。- 只能在类中使用,外界无法访问。
- 形式 1:没有使用
局部内部类:
- 概述:将类定义在方法内部。
- 特点:
- 只能在方法内部使用。
- 方法定义的局部变量在局部内部类中默认是
final
,不能修改。
匿名内部类:
- 语法定义格式:
new 抽象类/接口/类() { // 重写方法 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)