黑马程序员 内部类总结

 java培训、android培训期待与您交流!

 

定义:在外部类中再定义一个类即为内部类:
声明格式:
标识符(可以为权限) class 外部类的名称{
//外部类的成员
标识符 class 内部类的名称{
//内部类的成员
}
}
内部类可声明成public或private。当内部类声明成public或private时,对其访问的限制与成员变量和成员方法完全相同。
范例:
class Outer //定义一个外部类
{
private String info = "wangjiajun"; //定义外部类的私有属性
class Inner //定义一个内部类
{
public void print() //内部类的方法
{
System.out.println(info); //直接访问外部类的私有属性
}
}
public void fun() //外部类的方法
{
new Inner().print(); //通过内部类对象调用内部类的方法(权限一致!)
}
}
public class A
{
public static void main(String[] args) //主方法
{
new Outer.fun(); //调用外部类的fun()方法
}
}

运行结果:wangjiajun
从这个程序的运行效果来看,内部类可以直接的对外部类的私有成员进行直接访问,这也是内部类的唯一好处!
使用static定义内部类
使用static可以声明属性或方法,并且也可以声明内部类,而用static声明的内部类就变成了外部类,且用static声明的内部类不能访问非static的外部属性!
范例:
class Outer //定义一个外部类
{
private static String info = "wangjiajun"; //定义外部类的static型的私有属性
static class Inner //使用static定个内部类为外部类
{
public void print() //内部类的方法
{
System.out.println(info); //直接访问外部类的私有属性
}
}
}
public class A
{
public static void main(String[] args) //主方法
{
new Outer.Inner().print(); //访问内部类,注意格式!不能直接访问内部类new Inner().print();,需要一层一层的进去访问!
}
}
运行结果:wangjiajun
以上程序中将info属性定义成了static类型,这样,用static定义的内部类就可以访问这个static声明的属性了,如果这个属性不是用static声明的,程序将报错!
在外部访问内部类
格式:外部类.内部类 内部类对象 = 外部类实例.new 内部类(); 这个操作需要首先找到外部类的实例化对象,才可以通过外部类的实例去实例化内部类的对象。
范例:
class Outer //定义外部类
{
private String info = "wangjiajun";
class Inner //定义内部类
{
public void println()
{
System.out.println(info); //访问外部类的私有成员
}
}
}
public class A
{
public static void main(String[] args)
{
//在外部访问内部类,重点
Outer out = new Outer(); //实例化外部类对象
Outer.Inner in = out.new Inner(); //通过外部类的实例化对象来实例化内部类
in.print(); //调用内部类方法
}
}
运行结果:wangjiajun
在方法中定义内部类
在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数想要被内部类所访问,则参数前必须加上final关键字!
范例:
class Outer //定义外部类
{
private String info = "wangjiajun";
public void fun(final int tempt) //该方法中的参数可以被内部类所访问到
{
class Inner //定义内部类
{
public void println()
{
System.out.println("类中的属性:"+info); //访问外部类的私有成员
System.out.println("方法中的参数:"+tempt);
}
};new Inner().print();
}
}
public class A
{
public static void main(String[] agrs)
{
new Outer().fun(10);
}
}
运行结果:
类中的属性:wangjiajun
方法中的参数:10

java培训、android培训期待与您交流!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值