分为四种情况:
1.第一种情况:父类中有,而子类中没有的方法
2.第二种情况:父类中没有,而子类中有的方法
3.第三种情况:父类中有,子类中也有的方法
4.第四种情况:父类和子类都有,但都是静态方法
代码举例分析:
父类:SuperClass
子类:SubClass
方法:父类中:doWork1()
,doWork()
,static doWork3()
子类中:doWork2()
,doWork()
,static doWork3()
public static void main(String[] args) {
SuperClass a=new subClass();
//第一种情况:父类中有,而子类中没有的方法
a.doWork1();//输出:SuperClass.doWork1,调用了父类中存在的方法
//第二种情况:父类中没有,而子类中有的方法
//a.doWork2();//编译错误,因为编译的时创建的是编译类型,也就是SuperClass类型,
//而该类中没有doWork2()方法,会报错
//第三种情况:父类中有,子类中也有的方法
a.doWork();//输出:subClass.doWork,体现了多态的特性,调用了子类特定的方法(对象的运行类型)
//第四种情况:父类和子类都有,但都是静态方法
a.doWork3();//输出:SuperClass.doWork
/*
* 分析:静态方法和对象没有关系,访问时用的类名调用(SuperClass.doWork()),也就是用的时编译类型,即父类中的方法.
* 这种情况称为隐藏,而不是覆盖。只有与对象有关的才称为覆盖。
*/
}
}
class SuperClass{
public void doWork1(){//只在父类
System.out.println("SuperClass.doWork1");
}
public void doWork(){//子类父类都有
System.out.println("SuperClass.doWork");
}
public static void doWork3(){//子父类都有的static方法
System.out.println("SuperClass.doWork");
}
}
class subClass extends SuperClass{
public void doWork2(){//只在子类
System.out.println("subClass.doWork2");
}
public void doWork(){//子类父类都有
System.out.println("subClass.doWork");
}
public static void doWork3(){//子父类都有的static方法
System.out.println("subClass.doWork");
}