Java学习第五天

       当类加载器需要加载某个类时,类加载器会在加载初始化后生成该类的一个类对象(Class),用于描述该类的元数据信息等。在其后的连接过程中,会初始化该类的静态成员(变量或静态初始化器),静态初始化变量和初始化器按照先后顺序执行初始化。例如 static int a = 10 ; static{a=100};这样初始化后a=100。类加载器初始化(不同于构造方法)时,后递归初始整个继承树,及最先初始化的是顶层类,引用类。

      当生成一个对象时(即实例化),系统会为这个对象(实例)的属性进行默认初始化(规则与动态初始化数组一致)。实例化也会递归整个继承树。
                                  

一旦程序员提供了自己的构造器(构造方法),则系统就不在提供默认的构造方法(构造器,也即默认无参构造器)。

 

 当子类覆盖父类的方法后,就不能直接访问父类的同名方法了,这是可以借助super来访问被覆盖的父类的属性或方法;也可以通过类名来访问被覆盖的方法火属性(类属性或类方法 即static)


 多态:


得意如实例方法不同,对象的属性及类的静态方法不具有多态性。

 实例代码:

 

package lesson3;
class  Test extends Animal
{
	String age = "年龄"; 
	public static void main(String[] args) 
	{
	  Animal a = new Animal();
      System.out.println("a.age = "+a.age);
	  a.common();
	  a.test();
	  a.mystatic();

	  Test t = new Test();
      System.out.println("t.age = "+t.age);
	  t.common();
	  t.test();
	  t.mystatic();

	 Animal pa = new Test();
	System.out.println("pa.age = "+pa.age);
	  pa.common();
	  pa.test();
	  pa.mystatic();
	  //pa.sub();


	}

	public Test()
	{
		super();
		//System.out.println("Test无参数构造方法");
	}

	void test()
	{
		System.out.println("Test中的test方法,覆盖了Animal中的test方法!");
	}

	static void mystatic()
	{
		System.out.println("Testl中的mystatic静态方法!");
	}

	void sub()
	{
	}
}

class Hoo
{
	public Hoo()
	{
		//System.out.println("Hoo无参数构造方法!");
	}
}

class Animal extends Hoo
{
	 int age= 10;
	public Animal(int age)
	{
		this.age = age;
		//System.out.println("Animal有参数构造方法,参数age="+this.age);
	}

	public Animal()
	{
		this(100);
		//System.out.println("Animal无参数构造方法,此时age="+age);
	}

	void common()
	{
		System.out.println("Animal普通方法!");
	}

	void test()
	{
		System.out.println("Animal将被覆盖的方法!");
	}

	static void mystatic()
	{
		System.out.println("Animal将被覆盖的mystatic静态方法!");
	}
}

结果:


 通过引用变量来访问她所包含的属性和静态方法是,系统总是系统访问她编译时类所定义的属性或静态方法,而不是运行时类所定义的。

例如:Person p = new Person(); Object  o = p;o为编译时类型(即Object),后一个p为运行时类型即Person。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值