Ⅰ java的子类如何重写父类的方法
java中重写父类的方法只需写出与父类一模一样的这个方法即可,包括方法名,参数类型,参数值,返回值。
事例代码如下:
public class Demo extends FDemo{
public static void main(String[] args) {
a();//运行输出b
}
static void a(){
System.out.println("b");
}
}
class FDemo{
static void a(){
System.out.println("a");
}
}
java重写父类方法后,原有的父类里面的实现全部清空,变为重写后的内容。
1.父类的方法不能降级,同级的话就要覆盖,例如public方法不能在子类中被声明为protected或者private(子类重载除外),否则会有
Cannot rece the visibility of the inherited method from Father的编译错误。
2.父类的方法可以任意升级,但升级只有两种方式,要么覆盖,要么重载,覆盖就是方法体完全一样,重载则是参数必须改变,方法名称不变。
importjava.lang.reflect.Method;
classFather{
inta;
protectedintb=5;
protectedvoidfuncpro(){
//父类的保护方法,子类能够访问,但子类自身没有
System.out.println("fatherfuncpro");
}
publicvoidfuncpub(){
//父类公有方法,子类直接继承
}
privatevoidfuncpri(){
//父类私有方法,子类不可见
}
}
{
/**
*@paramargs
*/
//父类保护方法的重写
//publicvoidfuncpro(){
////子类自己可以这样定义,将会覆盖父类protected方法
//System.out.println("子类的func方法");
//}
//protectedvoidfuncpro(){
////ok
//}
//publicshortfuncpro(){
////illegal父类的protected和public方法在子类中是可见的,试想一下,如果编译器认为这个方法体正确,
//那么子类调用funcpro的时候究竟调用哪个呢?这样没有能构成重载
//}
//privatevoidfuncpro(){
////illegal
//}
privatevoidfuncpro(inta){
//这是方法重载,不会报错
System.out.println("sunfuncpro");
}
//父类公有方法的重写
//privatevoidfuncpub(){
////illegal:
//}
//protectedvoidfuncpub(){
////illegal
//}
//publicvoidfuncpub(){
////ok
//}
//publicintfuncpub(){
////illegal和父类的返回值不匹配
//}
//publicintfuncpub(inti){
////ok子类构成重载
//return1;
//}
//父类私有方法的重写
//publicvoidfuncpri(){
////ok
//}
//protectedvoidfuncpri(){
////ok
//}
//privatevoidfuncpri(){
////ok
//}
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
TestOveridetestOveride=newTestOveride();
Classclass1=testOveride.getClass();
try{
Method[]methods=class1.getMethods();
System.out.println("子类中的所有方法:");//可以看到,并没有父类的funcpro方法
for(Methodm:methods){
System.out.println(m);
}
System.out.println("子类调用父类的protected方法:");
testOveride.funcpro();
System.out.println("子类调用自己的func方法:");
testOveride.funcpro(1);
System.out.println("子类调用父类的字段");
System.out.println(testOveride.b);
}catch(Exceptione){
e.printStackTrace();
}
}
}
Ⅲ C++ 重写父类方法问题
用virutal修饰父类中要重写的函数即可,参考代码如下:
Ⅳ 子类继承父类,怎么把父类的方法重写
子类继承父类之后只能重写父类中的protected和public方法,默认没有修饰词的是friendly,同样可以重写,但是private方法就不能重写,即使子类中的方法名和父类的private方法一致,也只能看做是一个新的方法,而不是重写。
override也就是重写,覆写
Ⅳ 子类对父类的方法重写满足哪些规则
1、覆盖的方法的方法名称和参数类型必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类,或者什么也不抛出;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
5、覆盖的方法的访问权限必须大于等于被覆盖方法的访问权限。
6、被覆盖的方法不能是final类型的,因为final类型的方法就是声明不能被覆盖。但是覆盖的方法可以是final类型的,不会影响覆盖效果。
7、静态的方法不会发生覆盖。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
Ⅵ 多态的前提子类重写父类的方法,
这些抽象行为在向下演化为各种具体行为的过程中,会受到自身环境差异因子,展示出各种不同表象行为。
所以子类通过重写父类的方法,反映出自己的特征行为;否则反映的只是抽象的泛泛行为。
指针(引用)越抽象,能指的东西越广泛。但是相似性区域会越来越少,多态的范围也越来越小。召唤多态行为的时候要注意抽象的层次,不可太抽象,这样会导致能召唤的多态行为太少。
Ⅶ 各位前辈请问下子类继承父类为什么要重写 怎么重写
子类继承父类未必要重写父类的方法,也可以不重写直接调用,看你的需求。需要重写就意味着,父类的方法无法满足子类的业务需求,需要进行改造。这时就需要重写了。
Ⅷ js中子类重写父类中方法, 重写方法中用到父类的方法怎么调用呢
子类重写方法是在基类有此方法重写,那么声名一个子类的对象,调用的方法是子类的方法,
通过base转而调用父类中的方法,最终目的还是调用父类中的方法。
还有重写方法可以改变基类方法的作用,可以实现其他的效果,重写方法,和基类同名方法是两个不同实现的方法,
最主要你要分清楚 重写跟基类中的方法不一定实现同样的效果,还有基类也不一定知道派生类中是否重写了这个方法