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