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

这样构成覆盖吗?
class   t2
{
  private   void   test()
  {
  System.out.println( "t2   test ");
  }
}
class   t3   extends   t2
{
public   void   test()
{
System.out.println( "t3   test ");
}

}


public   class   t1
{
public   static   void   main(String[]   args)
{
t3   t   =   new   t3();
t.test();

}

}
输出结果是 "t3   test "
这样也构成覆盖吗?不可能是重载

------解决方案--------------------
you are so clever
------解决方案--------------------
class t3 extends t2之后重写了test()方法。````
------解决方案--------------------
不叫覆盖,他没从父类继承过来priate方法,而是写一个新的方法.
------解决方案--------------------
1. 子类 继承 父类 的所有方法 除了构造方法
因此 t2中的 test()方法 虽然是 priate 但也被继承过来了
只不过 t3 中 不能用 这个方法而已
2. t3 test() 方法 是属于 t3 自己的 与 父类无关
所有 即不是覆盖 也不是重载
记住两个概念:
a 方法重载:在同一个类中有相同的 名称 但参数类表不同
b 方法重写:在两个类中要求 名字 类型 参数列表都相同 方法体不同
------解决方案--------------------
将继承过来的东西从新定义才叫覆盖
现在t2中的方法是private,根本没有被t3继承
t3只是定义了一个和t2中名字相同的方法
其实和t2没有任何关系
------解决方案--------------------
private的方法.对子类是不可见的.怎么去覆盖?