//这里有个合适的例子,讲的是父类私有方法不能被覆盖。 public class A5DuoTai3 { private void m1() { System.out.println("父类私有方法调用"); } public static void main(String[] args) { A5DuoTai3 a=new B(); a.m1(); /* 输出结果为"父类私有方法调用", 并不是调用B中的m1方法“子类重写方法调用” */
} } class B extends A5DuoTai3 { public void m1() { System.out.println("子类重写方法调用"); } }
二、要有重写;
举个简单的例子,子类继承父类,但是没有实现其中的方法,当进行向上转型赋值时,调用的方法就只是父类的
class Second extends Main{ int a = 2; static int b = 2; public void f(){ System.out.println("子类成员方法"); } public static void g(){ System.out.println("子类静态方法"); } } public class Main { int a = 1; static int b = 1; public void f(){ System.out.println("父类成员方法"); } public static void g(){ System.out.println("父类静态方法"); } public static void main(String[] args) { Main m1 = new Main(); m1.f(); m1.g(); System.out.println("成员变量和静态变量 "+m1.a+","+m1.b); System.out.println("-----"); Main m2 = new Second(); m2.f(); m2.g(); System.out.println("成员变量和静态变量 "+m2.a+","+m2.b); System.out.println("-----"); Second s = new Second(); s.f(); s.g(); System.out.println("成员变量和静态变量 "+s.a+","+s.b); } }
输出:
父类成员方法
父类静态方法
成员变量和静态变量 1,1
-----
子类成员方法
父类静态方法
成员变量和静态变量 1,1
-----
子类成员方法
子类静态方法
成员变量和静态变量 2,2
B
错