1、父类中private的方法,可以被重写,但是不能被继承。如果被重写了,那么:父类 a=new 子类(),运行的时候,调用的是子类的private方法。测试代码如下:
package static_;
public class M {
public static void test() {
System.out.println("in m");
}
private void testPrivate() {
System.out.println("private in m");
}
}
class T extends M {
public static void test() {
System.out.println("in t");
}
//
// private void testPrivate() {
// System.out.println("private in t");
// }
public void testP(){
testPrivate();
}
}
下面是main函数所在:
package static_;
public class Snippet {
public static void main(String ss[]) {
T m = new T();
m.testP();
// M m = new T();
// m.test();
// M.test();
// T.test();
}
}
上面代码输出是:private in t,说明调用了子类的private方法【代码中的private方法被注释掉了,请取消注释】。
2、static方法可以被继承,但是不能被覆盖。覆盖的含义是:父类 a= new 子类(),在a调用方法的时候,如果调用的是子类的方法,那么说明父类的方法被覆盖了。但是,看下面的代码。
测试代码如下:
package static_;
public class M {
public static void test() {
System.out.println("in m");
}
public void testPublic() {
System.out.println("public in m");
}
}
class T extends M {
public static void test() {
System.out.println("in t");
}
public void testPublic() {
System.out.println("public in t1");
}
}
package static_;
public class Snippet {
public static void main(String ss[]) throws Exception {
M m=new T();
m.testPublic();
m.test();
}
}
代码输出是:
public in t1
in m
说明,父类的public方法被覆盖了。但是static方法调用的还是父类的。说明父类的方法不能被覆盖。即使被重写了,调用的时候还是会去调用父类的方法。除非直接T.test()指明调用子类的方法。
【这里其实很明确会调用父类的static方法。因为M m=new T();,是以父类的形式调用的,而静态方法是属于类的,所以是调用的父类的static方法。如果T m=new T();,那么调用的就必然是子类的static方法了。】
3、final方法不能被继承,不能被覆盖
package static_;
public class M {
public static void test() {
System.out.println("in m");
}
private void testPrivate() {
System.out.println("private in m");
}
public final void testFinal(){
System.out.println("final in m");
}
}
class T extends M {
public static void testtttttt() {
test();
System.out.println("in t");
}
private void testPrivate() {
System.out.println("private in t");
}
public final void testFinal(){//Cannot override the final method from M System.out.println("final in m"); } public void testP(){ testPrivate(); } } 上面红色字体标注了会报出来的错误。