课时63:方法覆写限制

简介: 在Java中,方法覆写(Override)允许子类扩展或修改父类的功能,但覆写时需遵守访问权限规则:子类方法的访问权限不能比父类更严格。例如,若父类方法为`public`,子类覆写时也应保持`public`;若父类方法为默认权限(Default),子类方法可为`public`或默认权限。此外,方法重载(Overloading)与覆写不同,重载是在同一类中定义多个同名但参数不同的方法,而覆写是在子类中定义与父类方法签名相同的方法。覆写时返回类型、方法名、参数列表必须一致,且不能有更严格的访问控制。良好的编程习惯是保持返回类型的统一。

课时63:方法覆写限制

虽然利用方法的覆写可以更好的扩充父类的功能,但是对于覆写也是有其自身要求的:被覆写的方法不能够拥有比父类方法更为严格的访问控制权限。


对于访问控制权限现在已经接触过三种:Public>Default(不写)>Private,Private权限是最小的,也就是说如果那你此时父类中的的方法使用了Default权限定义,那么子类定义该方法的时候只能使用Public或Default定义,如果你父类中使用了Public定义,那么子类中的方法只能使用Public定义。


范例:观察错误的覆写

class Channel {
public void connect(){
     System.out.println("【channel父类】进行资源的连接。");
}
}
class Databasechannel extends Channel{ //要进行数据库连接
void connect(){ //保留己有的方法名称,而后进行覆写
System.out.println("【子类】进行数据库资源的连接。");
 }
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel =new DatabaseChannel();
channel.fun();
   }
}

此时父类的方法使用了 Public 定义,而子类的方法使用了 Default权限,所以权限更加严格了,那么这种覆写就有错误。

image.png

但是既然说到了权限问题就必须考虑一下 Private 权限,Private 除了可以定义在属性上也可以定义在方法上。


范例:观察覆写以后:

class Channel {
void connect(){
System.out.println("【channel父类】进行资源的连接。");
}
}
class Databasechannel extends Channel{//要进行数据库连接
public void connect(){//保留己有的方法名称,而后进行覆写
System.out.println("【子类】进行数据库资源的连接。");
}
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel =new DatabaseChannel();
channel.fun();
}
}

image.png


范例:观察没有覆写:

class Channel {
void connect(){
System.out.println("【channel父类】进行资源的连接。");
}
public void fun(){
this.connect();   //调用本类方法
}
}
class DatabaseChannel extends Channel{    //要进行数据库连接
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel =new DatabaseChannel();
channel.fun();
}
}

image.png


范例:观察覆写以后:

class Channel {
void connect(){
System.out.println("【channel父类】进行资源的连接。");
}
public void fun(){
this.connect();   //调用本类方法
}
}
class DatabaseChannel extends Channel{    //要进行数据库连接
public void connect(){//保留己有的方法名称,而后进行覆写
System.out.println("【子类】进行数据库资源的连接。");
}
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel =new DatabaseChannel();
channel.fun();
}
}

image.png


范例:观察没有覆写

class Channel {
pubilc void connect(){
System.out.println("【channel父类】进行资源的连接。");
}
public void fun(){
this.connect();   //调用本类方法
}
}
class DatabaseChannel extends Channel{    //要进行数据库连接
//此时并不是一个覆写,因为父类的connect的方法不可见,那么这个方法对于子类而言就相当于是一个新定义的方法,与覆写没有任何关系
public void connect(){ //保留己有的方法名称,而后进行覆写
System.out.println("【子类】进行数据库资源的连接。");
}
}
public class JavaDemo{
public static void main(String args[]) {
DatabaseChannel channel =new DatabaseChannel();
channel.fun();
}
}

在以后实际开发之中只要是定义方法,95%情况下对使用Public,所以你覆写的时候最好也使用Public


面试题:请解释Overrtde和Overloading区别?Overloading时返回参数是否相同?

No.

区别

Overloading

Overrtde

1

中文含义

重载

覆写

2

概念

方法名称相同,参数的类型及个数不同

方法名称、参数类型及个数、返回值相同

3

权限

没有权限限制

被覆写方法不能拥有更严格的控制

4

范围

发生在一个类中

发生在继承关系类中

在进行方法重载的时候并没有对返回类型作出限制,但是好的习惯应该保持返回类型的一致。

 

相关文章
|
开发工具 Android开发
AndroidX到底是啥?
AndroidX到底是啥?
607 0
|
机器学习/深度学习 运维 算法
梯度&散度&旋度&峰度&偏度你分得清楚吗?驻点&鞍点你分得清楚吗?曲率&斜率你分得清楚吗?
本文介绍了四种常见的物理量:加速度,速度,位移和力学功。详细介绍了它们的定义、计算以及在物理学和工程学领域中的应用。此外,本文还介绍了四种与物理量相关的概念:向量、标量、质量和密度。 数学,物理,机器学习领域常见概念区分
3827 0
|
小程序
微信小程序文件上传无响应解决方法
微信小程序文件上传无响应解决方法
2166 0
|
开发者 图形学 Java
Unity物理引擎深度揭秘:从刚体碰撞到软体模拟,全面解析实现复杂物理交互的技巧与秘诀,助你打造超真实游戏体验
【8月更文挑战第31天】物理模拟在游戏开发中至关重要,可让虚拟世界更真实。Unity作为强大的跨平台游戏引擎,内置物理系统,支持从刚体碰撞到布料模拟的多种功能。通过添加Rigidbody组件,可实现物体受力和碰撞;使用AddForce()施加力;通过关节(如Fixed Joint)连接刚体以模拟复杂结构。Unity还支持软体物理,如布料和绳索模拟,进一步增强场景丰富度。掌握这些技术,可大幅提升游戏的真实感和玩家体验。
1071 1
|
分布式计算 资源调度 NoSQL
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下文件数量是常见的需求。本文介绍了四种方法:使用 `ls` 和 `wc` 组合、`find` 命令、`tree` 命令以及编程实现(如 Python)。每种方法都附有详细说明和示例,适合不同水平的用户学习和使用。掌握这些技巧,可以有效提升系统管理和日常使用的效率。
5445 6
ly~
|
Ubuntu Linux C语言
SDL 图形库安装常见错误及解决方法
SDL(Simple DirectMedia Layer)图形库安装过程中可能会遇到编译错误、运行时错误、依赖库缺失等问题。本文总结了在 Linux 和 Windows 系统上常见的错误及解决方法,包括检查和安装依赖库、配置 SDL 子系统、处理 X11 错误等,帮助用户顺利完成 SDL 的安装和配置。
ly~
3235 8
|
存储 缓存 NoSQL
深入解析Memcached:内部机制、存储结构及在大数据中的应用
深入解析Memcached:内部机制、存储结构及在大数据中的应用
|
监控 Java 数据库
使用Collections.sort排序集合
使用Collections.sort排序集合
|
Kubernetes 容器 Perl
k8s 部署 elasticsearch 单节点
k8s 部署 elasticsearch 单节点