Ⅰ 子类如何调用父类的构造函数
1、子类所有的 构造函数 默认调用父类的无参构造函数
2、如果父类没有定义构造函数,系统会默认定义一个无参无返回值的构造函数,子类继承时无需(无需的意思是:可以写可以不写)在子类构造函数中显式调用super( );如果父类定义了有参构造函数,此时子类的构造函数中第一行必须显式调用父类定义的某个有参数构造函数。即,显式调用对应的参数个数、对应参数类型与此super( [arg0][,arg1]…. )的父类构造函数。
3、如果子类的某个构造函数 想 调用父类的其他的带参数的构造函数,在构造函数的第一行人为添加 super(val1,val2[,val3…]),super()括号中的变量数量由想调用的父类的构造函数中的变量数量决定。如代码中的line 2,调用的是父类构造函数中两个参数的构造函数,那么Super(20,”Hello”)就两个变量。
4、自行添加super(val1,val2,…),就可以指定调用父类的那个参数类型和数量一致的构造函数。之后在此子类构造函数中,系统不会再默认调用父类无参构造函数;
5、如果子类的每个构造函数都自行添加super([val1,]….),除非人为调用父类无参构造函数,否则的话父类的无参构造函数可以不写。有super指定调用的父类构造函数存在即可
6、super指代父类对象,可以在子类中使用 super.父类方法名(); 调用父类中的方法(无论是类方法还是实例方法都可以),此外调用实例方法还可以在方法内部实例化再调用
Ⅱ 如何调用父类的构造方法
调用父类的构造方法:
当你new一个子类对象的时候,必须首先要new一个父类的对象出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:
第一个规则
子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。
第二个规则
如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。
了解更多java编程知识,推荐来北京尚学堂,雄厚的师资力量与科学的授课方式,会带给你最完美的学习体验。
Ⅲ 子类怎样调用父类方法
publicclassSuperTest{
publicstaticvoidmain(String[]args){
Parentc=newParent();
c.addAll();
}
}
classParent{
publicvoidadd(){
System.out.println("Aadd...");
}
publicvoidaddAll(){
System.out.println("AaddALL...");
add();
//在父子类之间,如果在父类中使用this关键字,那么运行子类时如果走到this行,指的是子类而不是父类。
//谁调用,this就是指谁
System.out.println(this.getClass());
}
}
classChildextendsParent{
@Override
publicvoidadd(){
//TODOAuto-generatedmethodstub
System.out.println("Badd...");
super.add();
}
@Override
publicvoidaddAll(){
//TODOAuto-generatedmethodstub
System.out.println("BaddALL...");
super.addAll();
}
}
最后输出的结果是
BaddALL...
AaddALL...
Badd...
Aadd...
按我的理解,super.addAll()方法调用来Parent中的addAll(),而Parent中的addAll()调用了add()。这里的add最后调用的是Child的add(),既然是super.addAll(),为何最后竟然调用的是子类的add()方法。。。
这里涉及到的问题是当子类调用super走到父类的方法中,这时的对象this到底是指Child子类还是父类Parent?
正确答案是子类,this.add();其中的this是指当前对象,也就是Childc=newChild();中的c.
因此虽然是在父类中执行的add方法,但实际上执行的是子类的add方法
在父类的add 方法中
System.out.println(this.getClass());
结果是Child而不是Parent!
Ⅳ 子类可以直接调用父类的函数吗
子类可以直接调用父类申明为public的方法。
1、若子类重写了父类中的某个函数。
在java中用super.functionName()调用父类方法,用this.functionName()调用子类方法。
在c++中可以用 基类::函数 调用
2、父类未被重写的public 方法可直接调用。
Ⅳ C#中,实例化子类对象,怎样调用父类构造方法
在你实例子类对象的时候,会默认地自动调用父类构造方法,然后调用当前类的构造方法(子类)。从上往下 依次进行。也就说 如果父类存在父类 ,也是如此,默认从上往下依次调用。你可以写个控制台 的demo ,在构造方法中 加个Console.WriteLine("文本"); 试下 就知道了。
Ⅵ C#中子类构造函数中如何调用父类构造函数
通过BAse 来用,在子类中,用户调用的类型要和父类的调用类型相同才行,不然会出错,可以参考下面的代码:
class A {
public A(int a, int b) {}
}
class B : A {
public B (int a, int b, int x, int y) : base(a, b) {}
}
(6)c子对象如何调用父类方法扩展阅读:
c#函数
Trim Trim(string) 将字符串前后的空格去掉
Ltrim Ltrim(string) 将字符串前面的空格去掉
Rtrim Rtrim(string) 将字符串后面的空格去掉
Mid Mid(string,start,length) 从string字符串的start字符开始取得length长度的字符串,如果省略第三个参数表示从start字符开始到字符串结尾的字符串
Left Left(string,length) 从string字符串的左边取得length长度的字符串
Right Right(string,length) 从string字符串的右边取得length长度的字符串