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 父类子类有同名方法时如何调用的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud Eureka服务发现实现过程

    SpringCloud Eureka服务发现实现过程

    这篇文章主要介绍了SpringCloud Eureka服务发现实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Spring Security跳转页面失败问题解决

    Spring Security跳转页面失败问题解决

    这篇文章主要介绍了Spring Security跳转页面失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Mybatis 自动映射(使用需谨慎)

    Mybatis 自动映射(使用需谨慎)

    这篇文章主要介绍了Mybatis 自动映射(使用需谨慎),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • SpringBoot 实战 之 优雅终止服务的方法

    SpringBoot 实战 之 优雅终止服务的方法

    本篇文章主要介绍了SpringBoot 实战 之 优雅终止服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java语言实现简单FTP软件 FTP软件效果图预览之下载功能(2)

    Java语言实现简单FTP软件 FTP软件效果图预览之下载功能(2)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP软件效果图预览之下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java图形用户界面之列表框

    Java图形用户界面之列表框

    列表框通过Swing组件JList产生,其总是在屏幕上占据固定行数的空间。这篇文章主要介绍了java图形用户界面之列表框的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • mybatis 遍历foreach中or拼接的操作

    mybatis 遍历foreach中or拼接的操作

    这篇文章主要介绍了mybatis 遍历foreach中or拼接的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • servlet 解决乱码问题

    servlet 解决乱码问题

    这篇文章主要介绍了servlet 解决乱码问题 ,需要的朋友可以参考下
    2015-04-04
  • Java回调函数原理实例与代理模式的区别讲解

    Java回调函数原理实例与代理模式的区别讲解

    今天小编就为大家分享一篇关于Java回调函数原理实例与代理模式的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Java实现简单LRU缓存机制的方法

    Java实现简单LRU缓存机制的方法

    这篇文章主要介绍了Java实现简单LRU缓存机制的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05

最新评论