博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++/JAVA/C#子类调用父类函数情况[留存]
阅读量:4506 次
发布时间:2019-06-08

本文共 2461 字,大约阅读时间需要 8 分钟。

时间久了就容易记不清了,特留存备用查看

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关键字指明父类构造函数,当通过子类构造函数创建实例,会调用指明的、父类的构造函数

 

转载于:https://www.cnblogs.com/jadeshu/p/10663554.html

你可能感兴趣的文章
将VS2013项目转成VS2010项目的方法
查看>>
[置顶] 怎么对待重复的代码
查看>>
多种方法实现H5网页图片动画效果;
查看>>
Ubuntu/CentOS下使用脚本自动安装 Docker
查看>>
源码解读Mybatis List列表In查询实现的注意事项
查看>>
POJ 2311 Cutting Game(二维SG+Multi-Nim)
查看>>
1978 Fibonacci数列 3
查看>>
1225 八数码难题
查看>>
C#控件的闪烁问题解决方法总结
查看>>
js 冒泡事件与解决冒泡事件
查看>>
2018-2019赛季多校联合新生训练赛第七场(2018/12/16)补题题解
查看>>
后台全选功能以及数据的提交方法
查看>>
Android 动画效果 及 自定义动画
查看>>
const与#define相比有什么不同?
查看>>
Eclipse4.7 SpringIDE插件的安装
查看>>
C#面向对象基础
查看>>
adb server is out of date. killing...
查看>>
Jquery页面加载效果
查看>>
ios对new Date() 的兼容问题
查看>>
Spark发展现状与战线
查看>>