我很久以前就知道静态方法不能调用非静态成员,但是从没想过为什么?只知道书上这么说的。
今天忽然想了一下,豁然开朗:
那么静态方法为何不能调用非静态成员?
首先要从静态方法是如何被调用的呢说起? 类名.静态方法();
非静态方法是如何被调用的呢? 实例变量名.非静态方法();
实例变量名.非静态方法(); 非静态方法中的this是指代调用此方法的实例变量,(非静态方法中直接调用成员变量或成员方法其实默认是用 this.成员 做替换),this是当前实例变量。既然this是实例变量那么 类名.静态方法(); 假设静态方法能调用非静态成员,那么静态方法中就可以出现this,既然能出现this,那么this指代什么呢?指代当前类名?
矛盾了吧?所以静态方法不能调用非静态成员。
既然提到this,我就多说一句:如果子类实例变量调用父类成员(属性和方法),父类中的this指代该子类实例变量,和上面 “this是当前实例变量”这句话不矛盾吧!