日期:2014-05-20  浏览次数:20692 次

java的多态、动态绑定 的问题
import java.util.ArrayList;
import java.util.List;

public class Test2 {
  public static void main(String[] args) {
  A a = new B();
  a.printA();
}

}
class A{
  void printA(){
  System.out.println("class A");
  method1();
  }
  private void method1(){
  System.out.println("Class A 's method1");
  }
}
class B extends A{  
  void method1(){
  System.out.println("Class B 's method1");
  }
   
}

class A
Class A 's method1
当我把classA中方法void method1()的private除掉后结果就是
class A
Class B 's method1

请大家解释一下2中结果的原理




------解决方案--------------------
没去掉是私有 就读不到private void method1()
去掉就能读
------解决方案--------------------
作用域public private proteced 默认。
默认的情况下是可以被继承的。而private是私有的。
将父类引用指向子类对象时。父类的私有方法肯定还是父类自己的。调用父类被继承的方法是子类实现的方法体内容
------解决方案--------------------

本例可以理解成这样,
import java.util.ArrayList;
import java.util.List;

public class Test2 {
public static void main(String[] args) {
A a = new B();
a.printA(); 
}

}
class A{
default void printA(){
System.out.println("class A");
method1();
}
private void method1(){
System.out.println("Class A 's method1");
}
}
class B extends A{ 
default void printA(){
System.out.println("class A");
method1();
}
default void method1(){
System.out.println("Class B 's method1");
}

}


不知道这样写出来lz明白了么