继承中的实例变量、静态变量、实例方法、静态方法被隐藏和被覆盖问题

       父类中的静态变量、实例变量、静态函数这三种会被子类的同名的静态变量、实例变量、静态方法所隐藏。

       父类中的实例方法会被子类相同的实例方法(重写的方法)所覆盖。

       所谓隐藏就是还有被运行的机会,覆盖基本已经玩完(但是也可以通过super进行调用)。

     下面通过一段代码进行详细的了解:

package T1;

import java.util.*;
class C{
	public int i=10;
	public static int j=100;
	public void f() {
		System.out.println("C的f函数");
	}
	public static void f1() {
		System.out.println("C的静态f1函数");
	}
}

class B extends C{
	public int i=9;
	public static int j=90;
	public void f() {
		System.out.println("B的f函数");
	}
	public static void f1() {
		System.out.println("B的静态f1函数");
	}
}

public class A {
	public static void main(String args[]) {
		B b=new B();
		b.f();
		b.f1();
		System.out.println("实例变量i="+b.i);
		System.out.println("静态变量j="+b.j);
		System.out.println("///分界线呀");
		C c=new B();
		c.f();
		c.f1();
		System.out.println("实例变量i="+c.i);
		System.out.println("静态变量j="+c.j);
	}
}

B的f函数
B的静态f1函数
实例变量i=9
静态变量j=90
///分界线呀
B的f函数
C的静态f1函数
实例变量i=10
静态变量j=100

分界线前面的那种就是直接使用子类的对象,那么父类的四种类型该隐藏的隐藏,该覆盖的覆盖。

分界线后面的使用的是一个父类指向了一个子类,那么那些被隐藏的静态变量、实例变量、静态方法就会被唤醒,也就是使用的是父类的,那个被覆盖的实例方法将不会被执行,仍然使用的是被覆盖后的,也就是子类中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值