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

 我来答
侠们figo
2015-06-18 · TA获得超过152个赞
知道小有建树答主
回答量:246
采纳率:50%
帮助的人:91.8万
展开全部

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

Cannot reduce 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 reduce the visibility of the inherited method from Father   
//  }  
      
//  protected void funcpub(){  
//      //illegal  Cannot reduce 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) 可以吗
青鸟中关村专家
2015-06-18 · 知道合伙人软件行家
青鸟中关村专家
知道合伙人软件行家
采纳数:1734 获赞数:8440
就职于北大青鸟中关村,自2004年踏入北大青鸟这个行业,已经有11年工作经验和8年的培训经验,寓教于乐

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

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

}
}

public class Sub extends Base(){

public void print(){

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

}
}
更多追问追答
追问
如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗
如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兴0809
2015-06-18 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:121
采纳率:66%
帮助的人:77.5万
展开全部
父类:

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之类的,把你想的代码写上去,看看能不能编译通过就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友935650cc2
2015-06-18 · TA获得超过121个赞
知道答主
回答量:112
采纳率:0%
帮助的人:24.8万
展开全部
extends 是继承的 关键字 重写 什么方法的时候 只需要在子类 中直接写出 父类的方法名字 然后 alt+? 就出来这个是简单方法 子类从写的时候 权限 需要注意下 子类的 权限 不能小于父类的
更多追问追答
追问
子类重写方法时,参数类型能变吗
如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-06-18
展开全部
@Override
更多追问追答
追问
如果父类是double f(double x.double y)
那子类是double f(int x.int y) 可以吗
追答
那叫重载
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式