Java中final、static关键字与方法的重写和继承易错点整理

 更新时间:2024年10月23日 09:01:08   作者:小强在此  
这篇文章主要给大家介绍了关于Java中final、static关键字与方法的重写和继承易错点的相关资料,在Java编程中final关键字用于限制方法或类的进一步修改,final方法不能被子类重写,而static方法不可被重写,只能被遮蔽,需要的朋友可以参考下

1.final方法不能被重写

如果父类中的方法被声明为final,那么这个方法就不能被子类重写。尝试在子类中定义与父类final方法同名、同参数列表、同返回类型(或子类型)的方法会导致编译错误。

class Parent {  
    final void show() {  
        System.out.println("Parent show()");  
    }  
}  

class Child extends Parent {  
    // 编译错误:无法重写final方法  
    @Override // @Override注解会触发编译器检查,但在这里不适用  
    void show() {  
        System.out.println("Child show()");  
    }  
}

2.static方法不是重写,而是遮蔽

static方法不能被重写,因为在Java中,static方法是类方法,而不是实例方法。如果你在子类中定义了与父类同名的static方法,那么这实际上是在子类中遮蔽了父类的static方法,而不是重写它。

class Parent {  
    static void show() {  
        System.out.println("Parent show()");  
    }  
}  

class Child extends Parent {  
    // 这不是重写,而是遮蔽  
    static void show() {  
        System.out.println("Child show()");  
    }  
}

3.final与static的组合

当一个方法同时被声明为final和static时,它仍然是一个类方法,不能被重写,也不能被子类中的同名方法所遮蔽(因为static方法总是通过类名来引用,所以子类中的同名static方法会被视为新的方法,而不是对父类方法的遮蔽)。但是,由于final的限制,这个组合实际上限制了任何尝试在子类中定义同名方法的尝试,因为final禁止了重写,而static则使得方法调用与实例无关。

class Parent {  
    final static void show() {  
        System.out.println("Parent show()");  
    }  
}  

class Child extends Parent {  
    // 尝试定义同名方法会导致编译错误,因为final禁止了重写,而static使得方法调用与实例无关  
    // static void show() { ... } // 编译错误  
}

4.final与继承

==final类不能被继承。==如果你试图继承一个被声明为final的类,编译器会报错。

final class FinalClass {  
    // ...  
}  

class AnotherClass extends FinalClass {  
    // 编译错误:FinalClass是final的,不能被继承  
}

5.static与继承

虽然static方法不能被重写,==但static变量(字段)是可以被子类继承的。==不过,子类不能直接修改继承自父类的static变量(除非在子类中声明了一个同名的static变量来遮蔽它)。子类可以通过类名来访问父类的static变量,也可以通过子类的类名来访问(如果子类没有遮蔽它的话)。

class Parent {  
    static int value = 10;  
}  

class Child extends Parent {  
    // 这里没有遮蔽Parent.value  
    // Child.value 仍然引用的是 Parent.value  
}

总之,理解final、static以及它们与重写和继承之间的关系对于编写清晰、可维护的Java代码至关重要。

总结

到此这篇关于Java中final、static关键字与方法的重写和继承易错点整理的文章就介绍到这了,更多相关final、static关键字方法重写和继承内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速解决springboot在yml配置了启动端口但启动还是8080问题

    快速解决springboot在yml配置了启动端口但启动还是8080问题

    这篇文章主要介绍了快速解决springboot在yml配置了启动端口但启动还是8080问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 详解spring cloud hystrix 请求合并collapsing

    详解spring cloud hystrix 请求合并collapsing

    这篇文章主要介绍了详解spring cloud hystrix 请求合并collapsing,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java中HashMap集合的常用方法详解

    Java中HashMap集合的常用方法详解

    本篇文章给大家带来的内容是关于Java中HashMap集合的常用方法详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。下面我们就来学习一下吧
    2021-11-11
  • 3行代码快速实现Spring Boot Oauth2服务功能

    3行代码快速实现Spring Boot Oauth2服务功能

    oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth服务器。仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth服务器。这篇文章给大家介绍3行代码快速实现Spring Boot Oauth2服务功能,需要的朋友参考下吧
    2018-04-04
  • java获取日期的方法

    java获取日期的方法

    这篇文章介绍了java获取日期的方法,有需要的朋友可以参考一下
    2013-10-10
  • Android Studio更改项目使用的JDK(详细步骤)

    Android Studio更改项目使用的JDK(详细步骤)

    本文介绍了如何在Android Studio中修改Gradle和JDK的配置步骤,包括打开设置、进入Gradle设置、修改JDK路径、保存并生效等,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

    Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

    ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行任务,它与SpringScheduler、Quartz等框架结合使用,本文介绍Spring Boot 整合 ShedLock 处理定时任务重复执行的问题,感兴趣的朋友一起看看吧
    2025-02-02
  • 解决jpa查询语句自动变成了update的问题

    解决jpa查询语句自动变成了update的问题

    这篇文章主要介绍了解决jpa查询语句自动变成了update的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解SpringMVC加载配置Properties文件的几种方式

    详解SpringMVC加载配置Properties文件的几种方式

    这篇文章主要介绍了详解SpringMVC加载配置Properties文件的几种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • Spring+Quartz实现动态任务调度详解

    Spring+Quartz实现动态任务调度详解

    这篇文章主要介绍了Spring+Quartz实现动态任务调度详解,最近经常基于spring boot写定时任务,并且是使用注解的方式进行实现,分成的方便将自己的类注入spring容器,需要的朋友可以参考下
    2024-01-01

最新评论