package ch06;
class Father {
public final void test(){
System.out.println("父类中final方法 ");
}
}
public class Son extends Father{
public void test( int i){
System.out.println("子类中重写的test(int)方法 "+i);
}
public static void main(String[] args){
Son son=new Son();
son.test();//Father类中 test()方法为什么能够被继承呢?他不是final类型的吗,不可以继承;
son.test(100);//Son类中重载的test(int i)方法;
}
}
//////////
为何子类可以继承得到父类被声明为final类型的方法,书上说不可以,我一时迷惑了。各位,看看说说为什么?
15 个解决方案
#1
方法的覆盖指的是返回值相同的同名同参数的方法。你把子类的test跟父类写成一样的。你试试。
#2
这样不是覆写吧,这个应该算是重载了,覆写是什么都相同,重载是函数名相同,参数个数或者类型不同的。
#3
上面说的不准确
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
#4
这个是重写吗?你子类的方法跟父类的一样吗?一个有参数,一个无参数。
#5
你那是重载。。。重写是这样么????
#6
一看回复这么多,又看了下书,果然自己把书上的东西看错了。现在明白了谢谢
#7
但是现在看看,重写,重载,覆盖这些名次也挺微妙的,能有达达整理出一个清晰的说法吗?实不相瞒,我看的基本Java书籍对这个问题的解释各不相同,汗
#8
我了个去,子类和父类相同的方法之间才叫Overwrite(重写),要求是两个方法的方法名和形参都是相同的;
现在这两个函数的形参明显是不一样的,所以根本就不是Overwrite,而是Overload(重载),重载肯定是可以的。
只是父类中的final方法不能被Overwrite(重写)而已。
现在这两个函数的形参明显是不一样的,所以根本就不是Overwrite,而是Overload(重载),重载肯定是可以的。
只是父类中的final方法不能被Overwrite(重写)而已。
#9
覆盖就是重写吗?
上面有个童鞋说:
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
这个说法貌似有问题吧?
上面有个童鞋说:
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
这个说法貌似有问题吧?
#10
大家都误解楼主的意思了,很明显楼主问的是final方法是否可以继承!
答案是可以继承,但不可以被覆盖!哪本书告诉你不可以继承了?final方法是防止子类覆写修改,子类继承直接使用是可以的,建议楼主看thinking in java
答案是可以继承,但不可以被覆盖!哪本书告诉你不可以继承了?final方法是防止子类覆写修改,子类继承直接使用是可以的,建议楼主看thinking in java
#11
楼桑说的不错,书上没错,是我看书的时候把几个概念弄混了,思维定式了
#12
注意重载和复写的区别
#13
我觉的10楼和8楼一起看 楼主就懂了
#14
其实很简单,改后代码如下
final class Father {
public final void test(){
System.out.println("父类中final方法 ");
}
}
public class Son extends Father{
public void test( int i){
System.out.println("子类中重写的test(int)方法 "+i);
}
public static void main(String[] args){
Son son=new Son();
son.test();
son.test(100);
}
}
#15
说返回值的那个你就别理他了……
你让他写两个同名同参数不同返回类型的方法试试……
这也太扯了……
#1
方法的覆盖指的是返回值相同的同名同参数的方法。你把子类的test跟父类写成一样的。你试试。
#2
这样不是覆写吧,这个应该算是重载了,覆写是什么都相同,重载是函数名相同,参数个数或者类型不同的。
#3
上面说的不准确
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
#4
这个是重写吗?你子类的方法跟父类的一样吗?一个有参数,一个无参数。
#5
你那是重载。。。重写是这样么????
#6
一看回复这么多,又看了下书,果然自己把书上的东西看错了。现在明白了谢谢
#7
但是现在看看,重写,重载,覆盖这些名次也挺微妙的,能有达达整理出一个清晰的说法吗?实不相瞒,我看的基本Java书籍对这个问题的解释各不相同,汗
#8
我了个去,子类和父类相同的方法之间才叫Overwrite(重写),要求是两个方法的方法名和形参都是相同的;
现在这两个函数的形参明显是不一样的,所以根本就不是Overwrite,而是Overload(重载),重载肯定是可以的。
只是父类中的final方法不能被Overwrite(重写)而已。
现在这两个函数的形参明显是不一样的,所以根本就不是Overwrite,而是Overload(重载),重载肯定是可以的。
只是父类中的final方法不能被Overwrite(重写)而已。
#9
覆盖就是重写吗?
上面有个童鞋说:
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
这个说法貌似有问题吧?
上面有个童鞋说:
方法的覆盖指的是子类中定义了与父类的同名同参数的方法。返回值可以不相同
这个说法貌似有问题吧?
#10
大家都误解楼主的意思了,很明显楼主问的是final方法是否可以继承!
答案是可以继承,但不可以被覆盖!哪本书告诉你不可以继承了?final方法是防止子类覆写修改,子类继承直接使用是可以的,建议楼主看thinking in java
答案是可以继承,但不可以被覆盖!哪本书告诉你不可以继承了?final方法是防止子类覆写修改,子类继承直接使用是可以的,建议楼主看thinking in java
#11
楼桑说的不错,书上没错,是我看书的时候把几个概念弄混了,思维定式了
#12
注意重载和复写的区别
#13
我觉的10楼和8楼一起看 楼主就懂了
#14
其实很简单,改后代码如下
final class Father {
public final void test(){
System.out.println("父类中final方法 ");
}
}
public class Son extends Father{
public void test( int i){
System.out.println("子类中重写的test(int)方法 "+i);
}
public static void main(String[] args){
Son son=new Son();
son.test();
son.test(100);
}
}
#15
说返回值的那个你就别理他了……
你让他写两个同名同参数不同返回类型的方法试试……
这也太扯了……