- Java code
class Base{ public void men1() { System.out.println("base men1 called_______"); } public void men2() { System.out.println("base men2 called_______"); }} class Sub extends Base{ private void men1()//报错 { System.out.println("Sub men1 called_______"); } public void men2() { System.out.println("Sub men2 called_______"); } public void men3() { System.out.println("Sub men3 called_______"); }} public class test { public static void main(String arg[]) { Base base=new Sub(); base.men2(); } }
1、为什么注释的部分会报错,为什么复写父类的方法的时候不能降低访问控制?
2、为什么Base base=new Sub(); base不能调用men2() 只能调用继承自父类的方法?
希望大家不要轻易的丢下一句多态。多分析下原因。、谢谢了
------解决方案--------------------
1。父类的public是向外提供的接口,也是一种向客户程序的约定,因为子类可以替代父类,所以必须遵从这种约定。protected可以认为是向子类提供的约定,同理。
2。当你使用base调用方法的时候,编译器只知道它的类型是Base,所以只能使用Base定义的方法。
至于调用时能正确调用base所指向的实际对象的方法,那就是多态了,是运行的时候发生的行为。