C++/JAVA/C#子类调用父类函数情况[留存]
时间久了就容易记不清了,特留存备用查看
c++
1.构造函数调用 常用初始化列表 或者显示调用
1.1同一个类中构造函数调用构造函数 尽量不要这样做,因为结果不确定!避免麻烦(C++11增加这方面能力,需在初始化列表中进行操作)
***可以把共用的代码封装成一个私有的成员函数,然后在构造函数内统一调用。
1.2子类构造函数调用基类构造函数
-----基类有默认构造函数时,可以在子类不写,则隐式调用
-----基类无/有默认构造函数时,在子类构造函数初始化列表处调用,则显示调用 基类类名(参数)
class Base
{
public:
Base(int b) : m_b(b)
{
}
private:
int m_b;
};
class Derived : public Base
{
public:
//普通派生类构造函数的写法
Derived(int b, int d) : Base(b), m_d(d)
{
}
private:
int m_d;
};
[
构造原则如下:
1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。
2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。
3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。
4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。
6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式
]
2.子类调用基类函数 类名::函数名(参数)
JAVA
1.构造函数调用 this(参数) / super(参数)
1.1同一个类中调用构造函数 [必须在构造函数中第一行] this(参数)
class Person {
private String name;
private int age;
private boolean sex;
public Person() {
this("jadeshu", 22, true); // 必须在第一行 不能同时调两个不同的构造函数
}
public Person(String name,int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
1.2子类构造函数调用基类构造函数 [必须在构造函数中第一行] super(参数)
class Man extends Person {
public Man(String name, int age) {
//System.out.println("====");
//不能再非构造函数中使用this调用构造函数
super(name, age, true); // 必须在第一行
}
}
2.子类调用基类函数 super.函数名(参数)
class Person {
private String name;
private int age;
private boolean sex;
public Person() {
this("jadeshu", 22, true); // 必须在第一行
}
public Person(String name, int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void person_test() {
System.out.println("Person person_test() called!");
}
public void sub_test() {
System.out.println("Person sub_test() called!");
}
}
class Man extends Person {
public Man(String name, int age) {
//System.out.println("====");
super(name, age, true); // 必须在第一行
}
public void sub_test() {
System.out.println("Man sub_test() called!");
}
public void sub() {
person_test(); // 直接调用父类的函数[子类不存在person_test函数]
super.sub_test(); // 调用父类中的函数[子类和父类存在同名函数时使用super.XXX]
System.out.println("Man sub() called!");
}
}
C#
1.构造函数调用
1.1同一个类中构造函数调用构造函数 :this(参数列表)
1.2子类构造函数调用基类构造函数 :base(参数列表)
2.子类调用基类函数 base.父类方法();
①.通过子类无参构造函数创建子类实例,会默认调用父类的无参构造函数
②.通过子类有参构造函数创建子类实例,也会默认调用父类的无参构造函数
③.在子类构造函数中通过base关键字指明父类构造函数,当通过子类构造函数创建实例,会调用指明的、父类的构造函数
C++/JAVA/C#子类调用父类函数情况[留存]的更多相关文章
- [转]Java中子类调用父类构造方法的问题分析
在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的? 答案如下: 当你new一个子类对象的时候,必须首先要new一个 ...
- java继承-子类调用父类的方法中包含子类重写的方法
# 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了... # 先看代码: public class Common { public static void main(String[] args ...
- 关于Java中子类调用父类方法
当一个类继承于另一个类,子类中没有父类的方法时.用子类的对象调用方法时,会首先在子类中查找,如果子类中没有改方法,再到父类中查找. 当一个方法只在父类中定义时,调用该方法时会使用父类中的属性. 如果该 ...
- Java vs C++:子类覆盖父类函数时缩小可访问性的不同设计
Java 和 C++ 都是面向对象的语言,允许对象之间的继承.两个语言的继承都设置有允许子类覆盖父类的“虚函数”,加引号是因为 Java 中没有虚函数这一术语,但是我们的确可以把 Java 的所有函数 ...
- Python基础-接口与归一化设计、抽象类、继承顺序、子类调用父类,多态与多态性
一.接口与归一化设计 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 由 ...
- Python开发基础-Day20继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- python基础之继承实现原理、子类调用父类的方法、封装
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- Python子类调用父类内属性的方法
常见的就是初始化方法__init__() python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函 ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
随机推荐
- browse-agent type and curl post
https://www.jb51.net/web/499127.html http://www.atool.org/useragent.php query for type 用Curl测试POST ...
- [math][mathematica] archlinux 下 mathematica 的安装 (科学计算软件 mathematica/matlab/sagemath)
ONLINE: http://www.wolframalpha.com/ GPL: segamath: http://www.sagemath.org/ famous and not free: ma ...
- Linux下MySql的配置文件my.cnf详细 讲解
经常在使用MySql,但是对于MySql下面的各种参数的配置并不是很熟悉,经常在需要改变某项参数的时候,还要到处在网上查找,有点不方便.今天想把MySql下面的配置文件my.cnf详细的做一个说明(L ...
- Elasticsearch的架构原理剖析
Elasticsearch 是最近两年异军突起的一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建.Elasticsearch 看名字就能大概了解下它是一个弹性的搜索引擎 ...
- Linux ethtool 命令
ethtool 是用于查询及设置网卡参数的命令,常见用法如下: 注意:该命令只是临时设置,如果网卡重启就失效了,如果想要永久保存应该配置 /etc/sysconfig/network-scripts/ ...
- 如何在js中将统计代码图标隐藏
建站时我们都会加一下网站统计,方便把控内容的内容的运营.大部分站长安装的站点统计是第三方统计代码,js形式的,很少用以服务器日志为基础分析的统计.(当然能通过网站日志来分析网站的运营者比一般的站长水平 ...
- Cookie和Session的区别?
1.Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端. 2.Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session ...
- 手把手教你用 Git(转)
转自:http://blog.jobbole.com/78960/ 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统, ...
- Nginx Log日志统计分析常用命令
IP相关统计 统计IP访问量(独立ip访问数量) awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) gr ...
- MySql利用mysqldump导出/导入数据库表数据
备份 在源主机上,先使用mysqldump命令备份,导出sql脚本文件 mysqldump -uroot -p tel_dev > /opt/tel_dev.sql 也可指定编码 mysqldu ...