首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java继承类中static成员函数的重写

在java中,static成员函数是否可以被重写呢? 结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行。...也就是说,虽然你可以定义一个重写函数,但是该函数没有多态特性。.../输出结果为 static in testClass1 16 tc2.SMothod(); //输出结果为 static in testClass2 17 } 18 } 从结果中可以看到...,当我们用父类的实例引用(实际上该实例是一个子类)调用static函数时,调用的是父类的static函数。...原因在于方法被加载的顺序。 当一个方法被调用时,JVM首先检查其是不是类方法。如果是,则直接从调用该方法引用变量所属类中找到该方法并执行,而不再确定它是否被重写(覆盖)。

1.7K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++初阶(类中的默认成员函数)

    呀哈喽,我是结衣 今天给大家带来的是类里面的默认成员函数,一共有六个默认的成员函数哦,包括构造函数,析构函数,拷贝构造函数,运算符重载函数,const成员函数,那么正篇开始。...类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。...1.3C++11的更新 在C++11的标准里,针对内置类型的成员不能初始化的缺陷,打了个补丁,就是:内置类型成员变量在类中声明时可以给默认值 #include using namespace...而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。 2.2特性 析构函数是特殊的成员函数,其特征如下: 析构函数名是在类名前加上字符 ~。 无参数无返回值类型。 一个类只能有一个析构函数。...注意:如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。 完

    15910

    C++初阶——(类中的默认成员函数)下

    时隔多天的类中的默认成员函数,在上篇博客中我们讲了,构造函数和析构函数。简单回顾下,构造函数就是类似于初始化函数,他的函数名与类名相同,且没有返回值。...Date类生成一个默认的拷贝构造函数 Date d2(d1); return 0; } 注意:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,二自定义类型是调用其拷贝构造函数完成拷贝的...那么此时用户还在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,所以赋值运算符重载只能是类的成员函数。...3.用户没有显示实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字拷贝,但是要注意的是:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重新完成拷贝。 注意!...3.const成员 将const修饰的“成员函数”称为const成员函数,const修饰成员函数实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

    9110

    结构体或类定义中对变长成员的处理

    对于一个结构体,头部信息固定,成员节点变长的,可以采用下面的定义方式: 1....res_count;  char cgiinfo[0]; } stHeadInfo __attribute__((__aligned__(4))); typedef struct _stCgiInfo /*成员节点...res_count;  int succ_num;  int fail_num;  char path[64]; } stCgiInfo __attribute__((__aligned__(4))); 这样,在初始化头信息时...2.stl 容器 当然,也可以统过使用STL的容器,如vector,定义stHeadInfo如下: typdef struct _stHeadInfo {  int version;  int magic_num...同时,在做为数据包在网络上传输时,可以在headinfo中加入len字段,有清晰的边界,便于收发包。 前者的缺点是:需要管理内存分配和释放。 后者的优点是:使用简单,无需管理内存。

    67910

    【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...在 * 右边修饰的是指针本身 ; 代码示例 : class Student { public: // 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void...* pThis, int age, int height) // 左数右指 , const 在 * 左边修饰的是内存中的数据, const 在 * 右边修饰的是指针本身 void fun(int...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量 ; class Student { public: void fun..." << endl; } // 使用 const 修饰 类的成员函数 // const 关键字可以 // 在 void fun(int age, int height) 之后 , 大括号之前

    23020

    【Kotlin】类的初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )

    文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin 类中 , 可以在 类声明 时 在 类名后...定义 " 主构造函数 " ; 在 主构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 的名称...---- 在主构造函数中 定义临时变量 , 格式为 : class 类名(_临时变量名: 临时变量类型){} 在主构造函数中也可以 定义成员属性 , 格式为 : class 类名(var 成员属性名:...---- Kotlin 类只允许 在定义类时 定义 一个主构造函数 , 在其中可以定义 临时变量 , 也可以定义 属性变量 ; 次构造函数 定义在 Kotlin 内部 , 可以定义 多个 次构造函数..., 每个次构造函数都可以有不同的参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 的 参数设置 参数值 ; 次构造函数中可以实现代码逻辑 , 作为主构造函数的补充 ; 代码示例

    4.9K20

    【C++】泛型编程 ⑬ ( 类模板示例 - 数组类模板 | 构造函数和析构函数 的 声明与实现 | 普通成员函数 的 声明与实现 | 外部友元函数 的 声明与实现 )

    一、类模板示例 - 数组类模板 1、需求分析 类模板 的 作用就是 令 算法 和 数据类型分离 ; 本篇博客中 开始 使用 类模板 开发一个 数组类 , 数组 中 可以维护 不同类型的 元素数据 , 如...: int , char , 自定义类 ; 数组 类模板 中 , 需要开发的要素如下 : 构造函数 , 初始化 数组数据 ; 拷贝构造函数 , 根据一个现有的 数组类模板对象 , 创建一个新的 实例对象...声明与实现 在声明类时 , 前面加上 模板类型声明 template , 说明在类中要使用类型 T ; 在 Array 类中 , 声明 构造函数 , 拷贝构造函数 , 析构函数...析构函数 : 在 类模板 外部 访问 类模板 中声明的 函数 , 先显示声明 模板类型 template , 然后在下面使用 域作用符 访问 类模板中的 函数 , 域作用符...cout 函数 " << endl; } 3、普通成员函数 的 声明与实现 重载 数组下标 [] 操作符 , 使用 类模板内部 的 成员函数即可完成 ; 普通成员函数 的 声明 : 数组下标

    52010

    C++11模板:如何判断类中是否有指定名称的成员变量?

    《C++11之美》 《C++模板,判断是否存在成员函数,实现差异化操作 》 我现在关心的是如何判断一个类中有成员变量?...看了上面关于判断成员函数的文章,理解其原理后,判断是否成员变量,也是差不多的道理,实现起来非常简单: /* 模板函数,检查T是否有名为's'的成员 * value 为bool型检查结果 * type...std::is_void::value}; }; 上面这个模板是用来检查类中是否有名为s的成员, 以opencl中的cl_int2向量类型举例,下面是cl_int2的定义: /* ---...对于非数组成员变量,去掉std::decay这一层,直接写成 static auto check(_T)->decltype(_T::s); 是完全可以的(不论在gcc还是vs2015)。...,用宏来改进上面的代码就显得很必要 /* 宏函数定义的模板函数,检查T是否有名为's'的成员 * value 为bool型检查结果 * type为s成员的类型(value为true是有效) */

    4.2K10

    【C++】仿函数在模板中的应用——【默认模板实参】详解(n)

    一.引入:查看(容器)文档时常常遇到的场景 我们在https://cplusplus.com/reference/forward_list/forward_list/查看类模板时,常常会看到这些东西,...其实我们在学习函数参数时也知道默认实参,但在类模板中遇到这种往往犯迷糊;我们直接给出结论:allocator是一个仿函数默认模板实参 二.默认模板实参详解(含代码演示) 前置知识: 仿函数...:把一个类用()重载(类中实现一个operator()),让其能够实现函数的功能 我们可以举一个例子:我们重写 compare,默认使用标准库的 less 函数对象模板 // compare 有一个默认模板实参...: 我们为此模板参数提供了默认模板实参less并为其对应的函数参数也提供了默认实参T 默认模板实参指出:compare 将使用标准库的 less 函数对象类(即仿函数),它是使用与 compare...一的类型参数实例化的 默认函数实参指出f将是类型E的一个默认初始化的对象 当用户调用这个版本的 compare 时,可以提供自己的比较操作,但这并不是必需的 与函数默认实参一样,对于一个模板参数,只有当它右侧的所有参数都有默认实参时

    13310

    【C++】类和对象(中):类的默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    1.类的默认成员函数 默认成员函数就是用户没有显示实现,编译器会自动生成的成员函数。...一个类,我们在不写的情况下编译器会默认生成6个默认成员函数(C++11后还增加了两个默认成员函数,新增的后面再说),重点学习前四个,后两个稍微了解即可。...共3点: 1.如果类中没有显示定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义,编译器就不再生成。...在C语言中实参传给形参就是直接拷贝过去,不会调用一个函数,在C++中传值传参要调用拷贝函数。 我们在直接调用拷贝构造函数时,因为是引用传参,就不会形成新的拷贝函数。..._day; } 但是我们不可以在类外访问私有的成员,这些_year, _month, _day都是私有成员,那咋办? 用友元函数。在类里面加上下面这句话。

    11910

    【C++】泛型编程 ⑨ ( 类模板的运算符重载 - 函数声明 和 函数实现 写在同一个类中 | 类模板 的 外部友元函数问题 )

    类模板 的 函数声明 与 函数实现 都写在同一个类中 ; 类模板 的 函数实现 在 类外部进行 , 写在相同的 .h 和 .cpp 源码文件中 ; 类模板 的 函数实现 在 类外部进行 , 写在不同的...+ 友元函数引入 如果要在 类模板 中进行运算符重载 , 就需要用到友元函数 ; 如果将 类模板 的 函数实现 , 定义在函数外部 , 结合 友元函数 使用 , 就变得很复杂 , 下面针对该问题进行讨论...; 二、普通类的运算符重载 - 函数声明 和 函数实现 写在同一个类中 下面的类是一个 普通类 , 其中定义了 成员变量 和 成员方法 ; 并为其重载了 左移运算符 和 加法运算符 ; 其中 加法运算符...示例 ; 问题就出现在 定义在外部的 友元函数 中 , 友元函数 , 不能 读取 和 访问 到 泛型类型 T , 也就是 类模板 中 的 template 泛型类型 T ; 在外部重新定义...template 就是重新定义了一个新的泛型 , 与 类模板 中的 T 不是同一个泛型类型 ; 解决上述问题 , 就需要将 友元函数 定义在 类模板 的内部 ; template

    27110

    C++11 利用const_cast和type_traits修改类成员常量的通用模板函数

    我们可以把上面的代码写成一个通用的模板函数。。。。以后只要调用模板函数就成了,就可以把代码简化为1行。...} //在 gcc5和vs2015下编译通过 不论new_value是个左值还是右值都可以正常调用 modify_const,模板函数modify_const的用法: const size_t...c = 21; modify_const(c,5ULL);//调用模板函数将常量c的值修改为5, //注意size_t 在64位系统下定义为unsigned long long,所以这里的参数...++语法上实现了修改const修饰的常量,其实只对类成员常量以及非基本类型的局部常量有效,对于函数局部基本类型常量修改是无效的。...对于全局常量或类的静态常量成员,因为位于程序的常量存储区,受CPU指令级的内存保护(只读),所以是不能被修改的,虽然修改全局常量或类成员静态常量的代码也能编译通过,但实际运行时会抛出内存访问冲突的异常。

    54340

    为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

    这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...不会重写成员变量,而是隐藏成员变量 Java文档中对隐藏域的定义: Within a class, a field that has the same name as a field in the superclass...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。

    3.5K40

    【C++】运算符重载 ② ( 类内部定义云算符重载 - 成员函数 | 类外部定义运算符重载 - 全局函数 | 可重载的运算符 )

    二、运算符重载语法 - 类内部定义云算符重载 ( 成员函数 ) 1、运算符重载函数语法说明 C++ 中允许重新定义运算符的行为 , 如常用的加减成熟运算符 , 都可以进行重载操作 ; 可以自定义运算符的操作...中的 number 变量值 cout 定义的运算符重载完整写法结果 : " << o3.number << endl; //运算符重载简化写法 //+ 是在 Operator 类中自定义的运算符重载...: 90 三、运算符重载语法 - 类外部定义运算符重载 ( 全局函数 ) ---- 1、运算符重载函数语法说明 类外部定义运算符重载 , 运算符重载也可以定义在类的外部 , 可以是任意包含类头文件的代码中..., 其定义方式与定义在类的内部对比 , 只有参数是有区别的 , 在类外部定义 , 其中需要两个参数 , 分别代表运算符运算的两个参数 ; 乘法运算符重载 , 对 “*” 号运算符进行重载 , 其作用是让两个...cout 定义的运算符重载完整写法结果 : " << o5.number << endl; //运算符重载简化写法 //+ 是在 Operator 类中自定义的运算符重载 //其作用是返回一个对象

    26010

    【C++深度探索】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数)

    (成员变量+成员函数),不过是把父类的成员变量拷贝给子类,并不指向同一个,子类中可以使用父类的成员变量,在子类里的改变不影响父类,但是成员函数是同一个。...需要注意的是,访问限定符只在类的内部起作用,在类的外部没有直接的影响。同时,访问限定符可以用于类的成员变量和成员函数的声明中,默认情况下,成员变量和成员函数的访问限定符是private。...三,继承中的作用域 (1) 在继承体系中基类和派生类都有独立的作用域。 (2) 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。...(在子类成员函数中,可以使用 基类::基类成员 显示访问) 如果要访问被隐藏的父类的同名成员,可以在子类成员函数中,使用 父类::父类成员来显示访问 (3) 需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏...子类和父类中可以有同名成员变量,因为它们属不同的类域,同一类里不可以。 (4) 注意在实际中在继承体系里面最好不要定义同名的成员。

    14310
    领券