Java中的实例方法、静态方法和数据域的覆盖和隐藏说明

调用实例方法与访问数据域或静态方法的主要不同:    

        使用引用变量调用实例方法时,变量所引用的对象的实际类在运行时决定使用该方法的哪个实现。访问数据域或静态方法时,引用变量所声明的类型在编译时决定使用哪个数据域或静态方法。


public class HidingDemo {
  public static void main(String[] args) {
    A x = new B();

    // Access instance data field i
    System.out.println("(1) x.i is " + x.i);
    System.out.println("(2) (B)x.i is " + ((B)x).i);

    // Access static data field j
    System.out.println("(3) x.j is " + x.j);
    System.out.println("(4) ((B)x).j is " + ((B)x).j);

    // Invoke static method m1
    System.out.println("(5) x.m1() is " + x.m1());
    System.out.println("(6) ((B)x).m1() is " + ((B)x).m1());

    // Invoke instance method m2
    System.out.println("(7) x.m2() is " + x.m2());
    System.out.println("(8) x.m3() is " + x.m3());
  }
}

class A {
  public int i = 1;
  public static int j = 11;

  public static String m1() {
    return "A's static m1";
  }

  public String m2() {
    return "A's instance m2";
  }

  public String m3() {
    return "A's instance m3";
  }
}

class B extends A {
  public int i = 2;
  public static int j = 12;

  public static String m1() {
    return "B's static m1";
  }

  public String m2() {
    return "B's instance m2";
  }
}

显示:

x.i is 1

(B)x.i is 2

x.j is 11

(B)x.j is 12

x.m1() is A's static m1

(B)x.m1() is B's static m1

x.m2() is B's m2

x.m3() is A's m3


不管静态方法或静态域是否隐藏,总可以使用它所声明类的名字来访问它。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值