㈠ 子类可以直接调用父类的函数吗
子类可以直接调用父类申明为public的方法。
1、若子类重写了父类中的某个函数。
在java中用super.functionName()调用父类方法,用this.functionName()调用子类方法。
在c++中可以用 基类::函数 调用
2、父类未被重写的public 方法可直接调用。
㈡ 在子类构造器中调用父类方法
使用super关键字在子类的构造器里调用父类的普通方法,例如:
/**
*父类
*
*@authorqd
*
*/
classF{
publicvoidteatA(){
System.out.println("teatA方法");
}
}
/**
*子类
*
*@authorqd
*
*/
classSextendsF{
//子类构造器中调用父类普通方法
publicS(){
super.teatA();
}
}
/**
*测试类
*
*@authorqd
*
*/
publicclassTest1{
publicstaticvoidmain(String[]args){
Ss=newS();
}
}
运行结果:
㈢ 如何在java中子类中父类的对象如何调用父类的方法
对于有继承关系的类,子类可以通过这个关键字调用父类中的方法。
比如:super.query();
此句话的意思是调用父类中的非私有方法query。
一般的用super关键字,调用类中的父类中重载构造方法。
比如:父类有个构造方法public
A(){},同时又写了一个重载的构造方法public
A(String
name);那么,在子类中可以使用super(name)指明调用父类的哪个构造方法进行实例化父类对象。
大概就是这样的!
㈣ JAVA子类继承了父类,那么子类怎么调用父类的方法
对于已覆盖的方法来说,例如Child是Parent的子类,而且,Child和Parent都有个toString()方法,也就是说,Child覆盖Parent的toString()方法。如果child要调用Parent的toString()方法,只需要把child强制转换为Parent就可以,也就是(Parent)child.toString(),这样就是调用其父类的toString()方法。如果不是覆盖的,就不用强制转换,直接调用就可以。
㈤ 子类如何调用父类的构造函数
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.父类方法名(); 调用父类中的方法(无论是类方法还是实例方法都可以),此外调用实例方法还可以在方法内部实例化再调用
㈥ 子类怎样调用父类方法
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!