java 父类子类有同名方法时如何调用的实现

 更新时间:2020年09月24日 10:25:00   作者:蓝蓝223  
这篇文章主要介绍了java 父类子类有同名方法时如何调用的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

父类引用默认调用子类重写的方法

如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法。

父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法,进而达到类间多态的效果。

但是,父类的引用只能访问子类重写的方法,父类中没有的方法,父类的引用不能访问。也就是说,通过父类的引用来调用子类的方法时,不能访问到子类后来自己定义的方法。

子类引用默认调用自定义的方法

通过子类的引用访问同名方法时,默认是重写之后的同名方法。

子类通过super关键字来调用被隐藏的父类方法

如果还要访问父类的同名方法,可以使用super关键字来显示调用。

多态

多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。

重写原则:两同两小一大

两同:

方法名相同

形参列表要相同

两小

抛出的异常类型小于等于父类方法抛出的异常类型,也就是要么是原来的异常类型(相等),要么是原来异常类型的子类(更小)

返回值类型要小于等于比父类的返回值类型,也就是要么返回原来的返回值类型(相等),要么是原来的返回值类型的子类(更小)

一大

子类重写的方法的访问权限要大于等于父类方法的访问权限:

如果原来的访问类型为public,则重写的方法的访问权限只能是public。

在Java 8之前,Java接口的方法默认使用public abstract修饰,所以实现接口方法时,访问权限只能是public。

重载原则:两同一不同

两同

重载发生在同一个类中,

跟继承没有关系.

一不同

形参列表不同

如何判断是重载还是重写

看形参列表:

当方法名相同,形参也相同的时候,就是重写,此时还需要满足重写的其他条件,不然就会出现错误。

当方法名相同,但是形参列表不同的时候,就是重载

覆盖和重载的区别

对形参列表的要求不同

重写要求形参列表要相同,

而重载要求形参列表不相同

对抛出的异常的要求不同

重写要求抛出的异常更小或相等

重载对抛出的异常没有要求

对返回值类型的要求不同

重写要求返回值类型更小或相等

重载对返回值类型没有要求

对访问权限的要求不同

重写要求访问权限要更大或相等,

而重载对访问权限没有要求

发生的范围不同

重写发生子类继承父类的时候

重载发生在同一个类中,和继承没有关系.

重载和重写的相同点

方法名要相同

补充知识:java中子类继承父类和实现接口有同名方法怎么处理

我们来一步步验证:

1.子类继承父类,实现接口,父类和接口有同名方法

以上这篇java 父类子类有同名方法时如何调用的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

public interface MyInterface {
 void test();
}
public class Father {
 public void test() {
 System.out.println("父类方法");
 }
}

public class Son extends Father implements MyInterface{}

子类直接继承父类和实现接口不实现接口方法不报错,说明这种情况下默认父类实现该方法

2.我们将父类中方法注释掉,看看结果

public interface MyInterface {
 void test();
}
public class Father {
// public void test() {
// System.out.println("父类方法");
// }
}

很明显,子类在继承过程中出现了错误提示,需要实现接口中的方法

3.将父类中方法取消注释,子类实现该方法,代码如下:

public interface MyInterface {
 void test();
}
public class Father {
 public void test() {
 System.out.println("父类方法");
 }
}

可以看到,子类方法提示是重写的父类方法。

至此,验证完毕!

以上这篇java 父类子类有同名方法时如何调用的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • JAVA基于静态数组实现栈的基本原理与用法详解

    JAVA基于静态数组实现栈的基本原理与用法详解

    这篇文章主要介绍了JAVA基于静态数组实现栈的基本原理与用法,结合实例形式详细分析了JAVA基于静态数组实现栈相关原理、用法与操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 单点登录的概念及SpringBoot实现单点登录的操作方法

    单点登录的概念及SpringBoot实现单点登录的操作方法

    在本文中,我们将使用Spring Boot构建一个基本的单点登录系统,我们将介绍如何使用Spring Security和JSON Web Tokens(JWTs)来实现单点登录功能,本文假设您已经熟悉Spring Boot和Spring Security,感兴趣的朋友一起看看吧
    2024-10-10
  • 关于@Value取值为NULL的解决方案

    关于@Value取值为NULL的解决方案

    这篇文章主要介绍了关于@Value取值为NULL的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 详解Spring @Lazy注解为什么能破解死循环

    详解Spring @Lazy注解为什么能破解死循环

    这篇文章主要来和大家探讨一下Spring中的@Lazy注解为什么能破解死循环,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-07-07
  • SpringBoot中的CompletableFuture类详解

    SpringBoot中的CompletableFuture类详解

    这篇文章主要介绍了SpringBoot中的CompletableFuture类详解,在 Java8中,引入了CompletableFuture类,它提供了一种简单而强大的方式来执行异步任务,今天我们就来详细解读一下这个类,需要的朋友可以参考下
    2023-07-07
  • IDEA使用技巧之如何将本地项目和git远程项目关联

    IDEA使用技巧之如何将本地项目和git远程项目关联

    这篇文章主要介绍了IDEA使用技巧之如何将本地项目和git远程项目关联问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • springboot实现定时器(一看即会,非常简单)

    springboot实现定时器(一看即会,非常简单)

    这篇文章主要介绍了springboot实现定时器(一看即会,非常简单),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • SpringBoot 整合 Avro 与 Kafka的详细过程

    SpringBoot 整合 Avro 与 Kafka的详细过程

    本文介绍了如何在Spring Boot中使用Avro和Kafka进行数据的序列化和反序列化,并通过MyBatisPlus将数据存入数据库,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • SpringBoot中API接口参数获取方式小结

    SpringBoot中API接口参数获取方式小结

    在Spring Boot中,API接口参数可以通过多种方式获取,具体取决于你定义的API接口参数类型(如路径参数、查询参数、请求体参数、请求头等),本文给大家就介绍了一些常见的参数获取方式,需要的朋友可以参考下
    2024-06-06
  • springsecurity基于token的认证方式

    springsecurity基于token的认证方式

    本文主要介绍了springsecurity基于token的认证方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08

最新评论