1.++与--

   对于a += 1 这样的表达式而言,还有一种更简单的运算符:++,要注意的是使用++运算符有两种方式:前缀式和后缀式,例如:

   a ++;//后缀式

   ++ a ;//前缀式

  注意这两种方式的区别和联系。

 首先对于a ++ 和++ a 这两种方式而言,对a的操作是完全一样的,都会在表达式运算结束后把a的值加1,这两种方式所不同的地方在于表达式的值的不同。

例如,假设 a = 5,则不管执行a ++ 还是++ a,执行之后a的值均为6。所不同的是,a ++这个表达式的值为5(即a加1之前的值),而++ a这个表达式的值为6(即a加1之后的值)。

a --与-- a有类似的关系。

2.子类重复定义父类成员变量

父类:

public class A{
            int x = 10;
            public int getAx(){
                  return x;
            }
          }

子类:

public class B extends A{
            int x = 100;
            public int getBx(){
                  return x;
            }
           public static void main(String [] args){
               B b = new B();
               System.out.println("getAx x =  " + b.getAx());
               System.out.println("getBx x =  " + b.getBx());
            }
          }

问题:父类A定义x并初始化为10,子类B继承A重新定义x并初始化为100,运行子类B,取得的x值各为多少呢??

结果:getAx x =  10

          getBx x = 100

解析:这里只做浅显的解析。

        B b = new B();

        System.out.println("getAx x =  " + b.getAx());

      有继承关系的两个类存在这样的关系,new出来的子类对象内部会有一个父类对象,这里理解为b对象内部包含一个A的对象,

     B类中没有定义getAx()方法,也就是说子类B没有重写父类A的getAx()方法, b.getAx(),表面上说.getAx()是继承下来的,因为

     B类中没有定义该方法,实际上内存中是什么样?就是我上面说的那样,b对象的内部还有一个A的对象,所以b.getAx()的时候,

     实际上是调用的它里面的那个父类A的对象的bgetAx()方法,而A类中定义的b.getAx()是return x;注意,return的这个x指的是

     自己A的x,所以打印出10。

     System.out.println("getBx x =  " + b.getBx());

     A和B中都定义了int x,现在的情况是子类与父类成员变量重名,但是,如果是子类B中假如没有定义成员变量x,这个时候,

     b.getBx()调用的还是父类Al的x,但是现在他们重名,你定义了,所以这个时候b.getBx()指的就是自己的成员变量了,

    这种现象叫做隐藏(hide)即: 一个域、静态方法或成员类型可以分别隐藏(hide)在其超类中可访问到的具有相同名字

  (对方法而言就是相同的方法签名)的所有域、静态方法或成员类型。隐藏一个成员将阻止其被继承。 这里就出现了这种现象,

   B中的int x 隐藏了A中的int x,所以getBx() return 的x 是B自己的x, 所以打印出100。

 

参考:http://wenku.baidu.com/view/a7b128bd960590c69ec37698.html