2.3 面向对象(三)内部类和包

内部类

将一个类定义在另一个类里面。

内部类的访问特点:
1、内部类可以直接访问外部类中的成员。
2、外部类要访问内部类,必须建立内部类的对象。

内部类能直接访问外部类中成员的原因:内部类持有了外部类的引用。外部类名.this

用途:
    一般用于类的设计
    分析事物时,发现该事物描述中还有事物,而且这个还有事物还在访问被描述事物的内容。这时就把还有事物定义成内部类来描述。

直接访问外部类中的内部类中的成员:
               Outer.Inner in = new Outer().new Inner();in.show(); 但通常内部类会封装起来private
如果内部类是静态的,则相当于是一个外部类。
               Outer.Inner in = new Outer.Inner();  in.show();
如果内部类是静态的,内部类里的成员也是静态的。
               Outer.Inner.show();

如果内部类中定义了静态成员,该内部类也必须是静态的。

局部内部类:
        内部类可以存放在局部位置上。也就是放在一个方法内部。
        内部类在局部位置上只能访问局部中被final修饰的局部变量。

 

匿名内部类:
        就是内部类的简写格式。
        必须要前提:内部类必须继承或实现一个外部类或者接口。

abstract class Demo
{
	abstract void show();
}

class Outer
{
	int num=4;
	/*
	class Inner extends Demo
	{
		void show()
		{
			System.out.println("show....."+num);
		}
	}
	*/
	public void method()
	{
		//new Inner().show();
		//Inner in=new Demo() 
		new Demo()  //new Demo的子类对象,匿名内部类
		{
			void show()
			{
				System.out.println("show....."+num);
			}
		}.show();
		//in.show();
	}
}

可以看出,匿名内部类,就是一个匿名子类对象。
        格式: new 父类或接口(){ 子类内容 }

使用场景:
        1、当函数参数是接口类型时,而且接口中的方法不超过三个,可以用匿名内部类作为实际参数进行传递。

class Outer
{
	public void method()
	{
		Object obj = new Object()
		{
			public void show()
			{
				System.out.println("show run");
			}
		};  //因为匿名内部类这个子类对象被向上转型为了Object类型,就不能再使用子类特有方法
		obj.show();
	}
}

要改为以下形式:

class Outer
{
	public void method()
	{
		new Object()
		{
			public void show()
			{
				System.out.println("show run");
			}
		}.show();
	}
}

对象的初始化过程:
    1、成员变量初始化
    2、父类的构造代码块初始化
    3、父类的构造函数,如果有成员方法被覆盖,调用子类的方法。
    4、显示初始化。(给那些变量赋值)
    5、子类的构造代码块初始。
    6、子类构造函数。

 

Object类

Object是所有类的根类。
Object是不断抽取而来,具备着所有对象都具备的共性内容。

Object的equals方法一般都会被覆盖,根据对象的特有内容,建立判断对象是否相同的依据。
    重写equals方法时一般也要重写hashCode方法。

 


对类文件进行父类管理。
给类提供多层命名(名称)空间。
写在程序的第一行。
类名的全称是 包名.类名。
包名的所有字母都是小写。

包与包之间的类进行访问,该访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。

4种权限使用范围
 publicprotecteddefaultprivate
同一类中okokokok
同一包中okokok 
子类中okok  
不同包中ok   

import是为了简化类名的书写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值