C++/JAVA/C#子类调用父类函数情况总结

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

c++

1.构造函数调用   常用初始化列表  或者显示调用

1.1同一个类中构造函数调用构造函数   尽量不要这样做,因为结果不确定!避免麻烦

可以把共用的代码封装成一个私有的成员函数,然后在构造函数内统一调用。

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • Java实现批量修改txt文件名称的方法示例

    本文实例讲述了Java实现批量修改txt文件名称的方法.分享给大家供大家参考,具体如下: 最近在做特征选择的实验时,需要批量修改一下文件名称,在这里做一下记录. package com.cqu.experiment; import java.io.File; /** * @author 作者: E-mail:@126.com * @version 创建时间:2016年12月26日 下午3:02:01 类说明 */ public class RenameTxt { public static vo

  • Javascript之高级数组API的使用实例

    JS中我们可以根据需求新建新的对象解决问题的同时,也有一些常用的内置对象供我们使用,我们称之为API,本篇文章只是对数组部分进行了练习. 例一:伪数组,不能修改长短的数组(所以没办法清零),可以修改元素,代码实现如下: <script> fn(1,2); fn(1,2,3,4,5,6); fn(1,2,4,5,7,9,4); function fn(a,b){ arguments[0]=0; console.log(arguments); arguments.push(1); console.

  • Java调用CXF WebService接口的两种方式实例

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 1.静态调用 // 创建WebService客户端代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 判断是否抛出异常 factory.getOutInterceptors().add(new LoggingInInterceptor()); // 注册webservic

  • Java复制文件常用的三种方法

    复制文件的三种方法: 1.Files.copy(path, new FileOutputStream(dest));. 2.利用字节流. 3.利用字符流. 代码实现如下: package com.tiger.io; import java.io.*; import java.nio.file.*; /** * 复制文件的三种方式 * @author tiger * @Date */ public class CopyFile { public static void main(String[]

  • Java与Python之间使用jython工具类实现数据交互

    最近有个功能需要java与python之间的数据交互,java需要把参数传给python,然后python计算的结果返回给java.于是就写了一个工具类. 首先,maven 需要加载jython的依赖.工具类代码如下: import java.util.List; import java.util.Map; import java.util.Properties; import org.apache.poi.ss.formula.functions.T; import org.python.co

  • Java中Timer的schedule()方法参数详解

    timer.schedule(new MyTask(),long time1,long timer2); 今天算是彻底的搞懂了这个曾经让我为之头疼的方法.下面我就重点介绍一下: 第一个参数,是 TimerTask 类,在包:import Java.util.TimerTask .使用者要继承该类,并实现public void run() 方法,因为 TimerTask 类 实现了 Runnable 接口. 第二个参数的意思是,当你调用该方法后,该方法必然会调用 TimerTask 类 Timer

  • Centos7.5配置java环境安装tomcat的讲解

    Tomcat是基于java语言的web服务器软件,本文主要介绍如何在centos7.5上配置java环境并安装tomcat 1.安装Java环境: 访问orcal官网下载JDK rpm包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载完成后执行:rpm -ivh jdk-8u161-linux-x64.rpm进行安装,默认会安装到/usr/java目录下 安装完成后,修

  • 实例讲解Java基础之反射

    前期准备 编写一个真实类phone,实现list接口 public class Phone implements List { public double price; public String name; public Phone() { } public Phone(double price, String name) { this.price = price; this.name = name; } public double getPrice() { return price; } p

  • Java中byte输出write到文件的实现方法讲解

    简述: 观察Byte值转为字符写入文件 如果在java里用byte打印出来 只有33 到 126的输出字符比较正常 此外发现Byte值为13是空格,10是换行符 知识点: 1. String 转为Byte输出("UTF-8"格式) 2. FileOutputStream 使用输出文件流 代码: package testChar; import java.io.File; import java.io.FileNotFoundException; import java.io.FileO

  • java.util.Collection源码分析与深度理解

    写在开头 java.util.Collection 作为Java开发最常用的接口之一,我们经常使用,今天我带大家一起研究一下Collection接口,希望对大家以后的编程以及系统设计能有所帮助,本文所研究的jdk版本为jdk1.8.0_131 明确一下几点: Collection是接口,其继承了Iterable接口 Collection属于单值类型集合,重点子接口List接口和Set接口 Java.util.List接口(有序.不唯一) ArraryList ArrayList 是一个数组队列,

随机推荐