JAVA中子类重写父类的方法,怎么写,什么要求
展开全部
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 · 知道合伙人软件行家
关注
展开全部
只要保证子类与父类中方法原型一致、返回类型和访问修饰符不低于父类就行了,不需要任何关键字
public class Base(){
public void print(){
System.out.println("这是Base类的方法!");
}
}
public class Sub extends Base(){
public void print(){
System.out.println("这是Sub类重写后的方法!");
}
}
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) 可以吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
父类:
public int getCount(String a,String b) ;
子类:
@Override
public int getCount(String a,String b) {
。。。。。。
}
方法名,参数类型,个数,返回值类型都要一样
访问级别不能降低
比如父类是public,子类不能是private
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之类的,把你想的代码写上去,看看能不能编译通过就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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) 可以吗
追答
那叫重载
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询