当前位置: 首页 > news >正文

java------方法的覆盖[重写],super和final关键字

方法覆盖(也称为方法的重写,Override)定义:

它是多态性的重要体现之一,是动态多态性的表现形式,他是指子类中可以定义名称,参数列表,返回值类型均与父类中某个方法完全相同的方法,我们就说子类中定义的这个方法覆盖了父类中的同名方法。

举例:

//anmial为父类
package anmial;
public class Animal {
        public void show(){//定义方法show
            System.out.println("I am a dog");
        }
    
    }
//子类Fish继承了父类Animal
public class Fish extends Animal {
    @Override
    public void show() {//对父类方法show的重写
        System.out.println("I am a fish");
    }
    public void shows(){//子类特有的方法
        System.out.println("我每天都在水里");
    }
}
import anmial.Animal;
import anmial.Fish;

public class test {
    public static void main(String[]args){
        Fish fish=new Fish();//为子类创建实例化对象
        fish.show();//调用重写的方法
        fish.shows();//调用自身方法
    }
}

输出

I am a fish
我每天都在水里

重写/覆盖需要注意的地方:

<1>必须同时满足方法名是同名的,参数列表是相同的,返回值也必须相同。

<2>如果父类的方法有final关键字修饰(称为最终方法),那么该方法不能被子类所覆盖。

<3>方法覆盖一定是建立在继承的基础上的,如果父类中的某个方法的访问权限是private,那么子类就无法进行覆盖。

<4>覆盖方法的访问权限一定要大于或等于被覆盖方法的访问权限,例如:子类父类处于同一个包中,父类的某方法的权限是public,那么子类中的该方法的权限也必须是public,如果父类中该方法是缺省访问权限,那么子类中的访问权限可以是缺省类,protected或者public访问权限。

类修饰符的含义:

在这里插入图片描述
注:abstract和final这两个修饰符不能出现在一个类的定义中

成员属性修饰符含义:

在这里插入图片描述

成员方法修饰符含义:

在这里插入图片描述
注意:

<1>public,protected,缺省和private这四个修饰符中只能选择一个作为方法的访问控制。

<2>final和abstract这两个修饰符不能同时用来修饰成员方法。

super关键字:

super关键字主要用来访问父类的成员属性,父类的成员方法以及父类的构造方法

访问父类成员属性的语法格式是:

super.父类成员属性;

访问父类构造方法语法格式是:

super.([paramlist]);

访问父类成员方法语法格式是:

super.父类成员方法名([paramlist]);

举例:

package shape;

public class Father {
    String name="小头爸爸";
   public Father(){
       System.out.println("我是"+name+"的构造方法");
   }
   public void show(){
       System.out.println("我是"+name+"的方法show");
   }
}
package shape;

public class Son extends Father{
    String name="大头儿子";
    public Son() {//访问父类构造方法
        super();
        System.out.println("我是"+name+",我继承了"+super.name+"的构造方法");

    }

    @Override
    public void show() {//访问父类成员属性和方法
        System.out.println("我是"+name+",我的爸爸是"+super.name+"!我继承了"+super.name+"父类的方法show");
    }
}
package shape;

public class SOn_test {
    public static void main(String[]args){
        Son son=new Son();
        son.show();
    }
}

输出如下:

我是小头爸爸的构造方法
我是大头儿子,我继承了小头爸爸的构造方法
我是大头儿子,我的爸爸是小头爸爸!我继承了小头爸爸父类的方法show

注意:

<1>调用父类无参的构造方法:super(),一定要出现在子类构造方法体中的第一句,而且可以省略不写,因为父类的无参构造在实例化子类之后会自动调用。

<2>如果调用父类带参数的构造方法,那么super(paramlist)一定要显式地写到子类构造方法体的第一句。

<3>调用父类构造方法的语句和调用子类重载的构造方法的语句(this关键字的一种用法)不能同时在子类构造方法体中。

final关键字:

final关键字表示最终的含义,可以用来修饰类,成员属性,局部变量以及成员方法。

final用在类的声明部分(class关键字的前面)表示该类不能有自己的“后代”,也就是不允许被其他类所继承final用来修饰成员属性和局部变量表示该值是常量,不能被修改,final修饰成员方法表示该方法不能被子类所覆盖。

举例:

给父类属性增加final关键字修饰:

 final String name="小头爸爸";

在子类中尝试修改该值:

 super.name="大头爸爸";

报错!该值不允许被修改:

在这里插入图片描述将父类的属性修改为final:

public class Son extends Father

子类将无法继承该属性:

在这里插入图片描述
将父类中的成员方法属性修改为final:

final void show()

子类将无法对其进行修改:
在这里插入图片描述

相关文章:

  • linux环境安装Spring boot开发环境-jdk,mysql,tomcat、git、maven
  • MATLAB算法实战应用案例精讲-【神经网络】激活函数:softmax函数(附MATLAB和Python实现代码)
  • Nginx的优化,安全与防盗链
  • 网络安全行业黑话大全
  • 【第二十篇】商城系统-秒杀功能设计与实现
  • MATLAB算法实战应用案例精讲-【神经网络】激活函数:tanh(附MATLAB、R语言、Python和C++代码)
  • 10.3复习
  • 【手把手带你学JavaSE】泛型的理解与使用
  • flink常见问题(持续更新)
  • ⌈Linux_ 感受系统美学⌋ 剖释“Linux下一切皆文件” | 底层级操作增进Linux内功
  • 【Java知识点大全】
  • 【华为机试真题 Python实现】矩阵扩散
  • 建立对单片机/嵌入式启动、运行的整体认知
  • 猿创征文 | 什么是PHP,PHP如何创建数据库
  • Kubernetes — StatefulSet 管理与使用
  • 08.Android之View事件问题
  • IndexedDB
  • JavaScript对象详解
  • Laravel 实践之路: 数据库迁移与数据填充
  • pdf文件如何在线转换为jpg图片
  • Python学习之路16-使用API
  • webgl (原生)基础入门指南【一】
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 今年的LC3大会没了?
  • 免费小说阅读小程序
  • 前端技术周刊 2019-01-14:客户端存储
  • 入手阿里云新服务器的部署NODE
  • 阿里云服务器购买完整流程
  • (06)金属布线——为半导体注入生命的连接
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)母版页和相对路径
  • . NET自动找可写目录
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .htaccess配置常用技巧
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net MySql
  • .Net Web项目创建比较不错的参考文章
  • .NET 分布式技术比较
  • .Net7 环境安装配置
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net中的Queue和Stack
  • @Autowired 与@Resource的区别
  • @Builder用法