子类可以同时继承父类的有参构造函数和无参函数吗,继承了无参函数还会再继承有参函数吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子类可以同时继承父类的有参构造函数和无参函数吗,继承了无参函数还会再继承有参函数吗?相关的知识,希望对你有一定的参考价值。
不会。子类的构造方法中默认调用父类的无参构造方法。如:public 子类() super(); .......... super()这句可以省略不写,但不能说没有。当要调用父类的有参构造函数时,此时子类构造方法须显式写明 super(参数),无参的将会被替换。
理解不了,记住一点:.子类的构造方法,需将父类的构造方法写到第一句。如果同时调用无参和有参,将不满足此条件。(第一句)
调用父类有参和无参的解决办法:父类的构造方法可以重载,子类的当然也可以,把子类构造方法第一句换了就行。
注意:本人觉得不能用“继承”这个字眼,应该是调用。为什么?因为子类继承父类,只是继承其公有的属性和方法。私有的,构造继承不过来。 参考技术A 定义的Sub的无参构造方法需要调用父类的无参构造方法。把子类Sub的无参构造方法注释掉,那就正确了。证明了子类显示调用父类带参构造函数时,系统还会自动调用父类的无参构造函数是正确了. 参考技术B 我用的C# 不会继承构造方法. 但是子类是可以调用的
面向对象:继承抽象类抽象方法虚方法
1、继承
什么是继承?
目的:代码重用
public class 子类:父类
{
}
父类 基类 被继承的类
子类 派生类 需要继承的类
父类构造函数的继承
创建子类对象时,先调用父类构造函数,再调用子类构造函数
默认调用父类无参构造函数
如果子类有无参构造函数,要求父类也有无参构造函数
如果调用父类的有参构造函数,显式用base调用
public 子类(参数列表)base(实参)
实参:要调用的父类的有参构造函数的参数列表{}
base:父类对象(父类实例)
2.抽象
abstract
抽象方法:访问修饰符 abstract 返回类型 方法名(参数);
抽象方法只是行为的声明,没有方法体,没有具体实现
抽象方法必须在抽象类中定义
抽象方法必须在非抽象子类中实现
抽象类:访问修饰符 abstract class 类名{}
抽象类可以包含抽象方法,和非抽象方法(实现方法,虚方法)
抽象类不能实例化
抽象类中的抽象方法必须在非抽象子类中实现
抽象类通常会被继承(通常在抽象类中写抽象方法只是为了声明一下子类中要实现的方法,方法体写在子类中的重写的方法中)
重写方法:访问修饰符 override 返回类型 方法名(参数){方法体}
子类对父类方法的改写
当重写父类中的方法时要保证方法的签名必须保持一致
3.虚方法:
virtual
继承 重写 定义的位置
实现方法 可以继承 不能重写 任何地方
抽象方法 可以继承 必须重写 抽象类中
虚方法 可以继承 可以重写 除静态类、密封类之外
3.装箱与拆箱
装箱:值类型转换成Object类型或者此值类型所实现的任何接口类型的隐式转换(一定能成功)
操作:在堆中分配一个对象实例,将该值复制到新的对象中(会多占用内存,影响性能)
例子:int i=10;
隐式装箱(可以是隐式的也可以是显式的)
object obj=i;
显示装箱
obj=(obj)i
拆箱:从Object类型到值类型或者此值类型实现的接口类型的隐式转换(不一定成功)
例子:隐式拆箱
int n=(int)obj
装箱拆箱规则:任何值类型都能装箱/拆箱不一定成功
装箱拆箱缺点:影响程序性能
练习:定义形状类,包含计算面积的方法,分别定义一个圆类和矩形类,添加需要的属性和构造函数
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 继承抽象类和装箱拆箱
{
public abstract class Shapcs//父类
{
public abstract double Sum();
}
public class Yuan : Shapcs
{
public double r;
public Yuan(double r)
{
this.r = r;
}
public Yuan() { }
public override double Sum()
{
return Math.PI * r * r;
}
}
public class Ju : Shapcs
{
public double sid;
public double hid;
public Ju(double sid,double hid)
{
this.sid = sid;
this.hid = hid;
}
public Ju() { }
public override double Sum() {
return sid * hid;
}
}
}
Main方法中调用的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 继承抽象类和装箱拆箱
{
class Program
{
static void Main(string[] args)
{
#region 重写 抽象方法 计算圆和矩形的面积
Yuan y = new Yuan(2.6);
Console.WriteLine(y.Sum());
Ju j = new Ju(5, 6);
Console.WriteLine(j.Sum());
Console.ReadKey();
//Cat ca = new Cat();
//ca.Eat();
//ca.Sleep();
//Console.ReadKey();
//#endregion
}
}
}
以上是关于子类可以同时继承父类的有参构造函数和无参函数吗,继承了无参函数还会再继承有参函数吗?的主要内容,如果未能解决你的问题,请参考以下文章