内部类

内部类

将一个类定义在另一个类中,对立面的类称为内部类(内置类、嵌套类)

内部类访问特点

内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员必须要建立内部类的对象

内部类的作用

为了访问外部类的成员方便

内部类的位置

内部类定义在成员位置上(和外部类的属性和方法并列存在,也相当于外部类的成员)
内部类定义在局部位置上(定义在外部类的方法中)

内部类定义在成员位置上

内部类定义在成员位置上相当于外部类的成员
室成员就可以被public private static 成员修饰符修饰
被static修饰的内部类只能访问外部类中的静态成员
class 类名 {
private int num=3;
class Inner{//内部类
void show(){
System.out.println(num);
}
}
}
带内部类的类,最后能生成2个class
其他类中如何访问一个类中的内部类成员
注意:要看内部类的修饰符是什么,根据不同的情况进行不同的访问

定义在成员位置时访问类中成员

当内部类定义在成员上时,如何访问内部类中的成员
当内部类为public、defalut时直接访问外部类中的内部类成员
package fuxi.com;

public class Outer {
 int a = 10;

private void print() {
	System.out.println(a);

}

public class Inner {
	void P() {
		System.out.println("44444");
	}
}

public static void main(String[] args) {
	Outer.Inner in=new Outer().new Inner();
	//外部类名.内部类名     外部对象.内部对象
	in.P();
}
}

当内部方法是私有的(priivate)时,此时其它类访问不到
当内部类为static时

     package fuxi.com;

public class Outer {
int a = 10;

private void print() {
	System.out.println(a);

}

public static class Inner {
	void P() {
		System.out.println("44444");
	}
}

public static void main(String[] args) {
	Outer.Inner in = new Outer.Inner();
	// 外部类名.内部类名 内部类对象 无需建立外部类对象
	in.P();
}
}

当内部类是静态的它的成员也是静态的

package fuxi.com;

public class Outer {
int a = 10;

private void print() {
	System.out.println(a);

}

public static class Inner {
	static void P() {
		System.out.println("44444");
	}
}

public static void main(String[] args) {
	
	Outer.Inner.P();
	// 类名.方法名
	//内部类的成员时静态的,那内部类也应该是静态的
}
}

外部类访问内部类成员

外部类访问内部类中的成员,必须建方法,在方法中通过对象来访问

 package fuxi.com;

 public class Outer {
int a = 10;

private void print() {
	System.out.println(a);

}

public static class Inner {
	
	static int a=10;
	static void P() {
		System.out.println("44444");
	}
}
public void getOt() {
// TODO Auto-generated method stub

Inner in=new Inner();
in.a=50;
in.P();

}
public static void main(String[] args) {
	new Outer().getOt();
	
}
}
  //外部类要访问本类中的内部类,要在本类创建方法来访问

内部类持有外部类的引用 外部类名.this
内部类访问自己的成员 内部类名.this 或this.

内部类定义在局部上如何访问外部成员

package fuxi.com;

 public class Outer {

static int a=30;
private void gatA() {
	
	class Inner{
		int a=20;
		public void print() {
			System.out.println("内部类方法里的a="+a);
			System.out.println("内部类里的a="+this.a);
			System.out.println("内部类a="+Outer.a);

		}
	}
	Inner in=new Inner();
	in.print();
}
public static void main(String[] args) {
	new Outer().gatA();
}
}

内部类定义在局部位置上

内部类定义在局部位置上如何访问内部类中的成员
可以直接访问外部中的成员
同时可以访问所在局部中(方法中)的局部变量,但是必须是被final修饰的

匿名内部类

匿名内部类是内部类的简写格式
匿名内部类的使用前提:
匿名内部类必须继承一个外部类,或实现一个接口。
匿名内部类格式
匿名内部类:匿名内部类就是局部内部类的形式之一
匿名内部类:
可以继承某个类,但不能用extends
可以实现接口,但不能用implements

包的概念

JAR(Java Archiver ,Java归档文件)是与平台无关的文件格式,它允许将多文件组合成一个压缩文件
包的作用:使用方便
打包方式1:
步骤1
在MyEclipse中选择需要导出的项目,package或者类,右击选择Export子选项
步骤2
选择Java—>选择JARfile
步骤3
可再次根据需要选择打包的内容,并选择jar包生成位置和命名
打包方式2:
步骤1
在Dos下敲jar,会出现jar工具参数及使用例子(jdk1.6\bin\jar.exe)
步骤2
在Dos下选择一个文件
D: >jar -cf Hello.jar Hello
D: >jar -cvf Hello.jar Hello
c生成新的归档文件
v在控制台生成详细输出
f制定归档文件名

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值