首页 热点专区 义务教育 高等教育 出国留学 考研考公

JAVA中子类重写父类的方法,怎么写,什么要求

发布网友 发布时间:2022-04-27 07:04

我来回答

5个回答

热心网友 时间:2022-06-28 05:31

1.父类的方法不能降级,同级的话就要覆盖,例如public方法不能在子类中被声明为protected或者private(子类重载除外),否则会有

Cannot rece the visibility of the inherited method from Father的编译错误。

2.父类的方法可以任意升级,但升级只有两种方式,要么覆盖,要么重载,覆盖就是方法体完全一样,重载则是参数必须改变,方法名称不变。


import java.lang.reflect.Method;  
  
class Father{  
    int a;  
    protected int b = 5;  
    protected void funcpro(){  
        //父类的保护方法,子类能够访问,但子类自身没有  
        System.out.println("father funcpro");  
    }  
    public void funcpub(){  
        //父类公有方法,子类直接继承  
    }  
    private void funcpri(){  
        //父类私有方法,子类不可见  
    }  
}  
public class TestOveride extends Father {  
  
    /** 
     * @param args 
     */  
    //父类保护方法的重写  
//  public void funcpro(){  
//      //子类自己可以这样定义,将会覆盖父类protected方法  
//      System.out.println("子类的func方法");  
//  }  
  
//  protected void funcpro(){  
//  //ok  
//}  
      
//  public short funcpro(){  
//      //illegal    父类的protected和public方法在子类中是可见的,试想一下,如果编译器认为这个方法体正确,  
        //那么子类调用funcpro的时候究竟调用哪个呢?这样没有能构成重载  
//  }  
  
//  private void funcpro(){  
//      //illegal  
//  }  
    
    private void funcpro(int a){  
        //这是方法重载,不会报错  
        System.out.println("sun funcpro");  
    }  
  
    //父类公有方法的重写  
  
//  private void funcpub(){  
//      //illegal:Cannot rece the visibility of the inherited method from Father   
//  }  
      
//  protected void funcpub(){  
//      //illegal  Cannot rece the visibility of the inherited method from Father  
//  }  
      
//  public void funcpub(){  
//      //ok  
//  }  
      
//  public int funcpub(){  
//      //illegal 和父类的返回值不匹配  
//  }  
  
//  public int funcpub(int i){  
//      //ok 子类构成重载  
//      return 1;  
//  }  
  
    //父类私有方法的重写  
  
//  public void funcpri(){  
//      //ok  
//  }  
      
//  protected void funcpri(){  
//      //ok  
//  }  
  
//  private void funcpri(){  
//      //ok  
//  }  
      
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        TestOveride testOveride = new TestOveride();  
        Class class1 = testOveride.getClass();        
        try {  
            Method[] methods = class1.getMethods();  
            System.out.println("子类中的所有方法:");  //可以看到,并没有父类的funcpro方法  
            for(Method m: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(Exception e){  
            e.printStackTrace();  
        }  
  
    }  
  
}

追问如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗

热心网友 时间:2022-06-28 05:31

只要保证子类与父类中方法原型一致、返回类型和访问修饰符不低于父类就行了,不需要任何关键字
public class Base(){
public void print(){

System.out.println("这是Base类的方法!");

}
}

public class Sub extends Base(){

public void print(){

System.out.println("这是Sub类重写后的方法!");

}
}

热心网友 时间:2022-06-28 05:32

父类:

public int getCount(String a,String b) ;
子类:
@Override
public int getCount(String a,String b) {
。。。。。。

}
方法名,参数类型,个数,返回值类型都要一样
访问级别不能降低
比如父类是public,子类不能是private追问如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗

追答不可以的

这些问题如果不懂可以装一个eclipse之类的,把你想的代码写上去,看看能不能编译通过就可以了

热心网友 时间:2022-06-28 05:32

extends 是继承的 关键字 重写 什么方法的时候 只需要在子类 中直接写出 父类的方法名字 然后 alt+? 就出来这个是简单方法 子类从写的时候 权限 需要注意下 子类的 权限 不能小于父类的

热心网友 时间:2022-06-28 05:33

@Override

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com