Java自定义类可以放在任何一个地方,根据自定义类放的地方不同,叫法也不相同,
包括静态内部类、局部类、成员类、匿名类四种。
静态内部类
作为类的静态成员,在某个类内部定义,。也叫嵌套类。静态内部类,可以被视作一个类的内部静态成员,或静态方法来处理。
public class InnerStatic(
public static void main(String args[]){
Document doc= new Document();
doc.Edit();
//在外部类的外部使用静态内部类
Document. Picture pict= new Document.Picture();
pict.picInfor();
}
}
class Document{//定义一个外部类
String text;
long count;
//在类内部定义一个静态内部类
public static class Picture{
long start row=500;
long start col=100;
…………
}
}
public void Edit(){//在外部类的内部使用内部静态类
Picture pic=new Picture();
pic.picInfor();
}
}
Tips:1.内部类可访问外部类的成员变量与成员方法,甚至是私有的,也可访问。
2.外部类方法可访问内部类方法、成员。
局部内部类
Java允许在一个方法中定义类,定义的类叫局部内部类。
package cn.edu.qvtu.rg ;
public class Out {
private int x=1;
class Inner{
int x=2;
void inff(){
int x=3
System.out.println(x);
System.out.println(this.x);
System.out.println(Out.this.x);
}
void outff(){
Inner i=new Inner();
i.inff();
}
}
Tip:1.局部内部类可以发外部类的所有成员变量和方法。
2.局部内部类可以访问方法的形参和局部变量,但被局部内部类访问的方法形参、局部变量必须设置为final变量。
3.调用本类用this,外部类用标明类名+this
4.内部类的成员,要有一个是静态,那内部类必须是静态内部类
5.一旦外部类为静态,内部类也需定义为静态。(有访问,访问内部类的外部类)
成员内部类
在一个类内部嵌套另一个类,嵌套在内部的个类直接作为成员使用
public class MInner{
public static void main(string args []){
Outer ou= new Outer();//在外部类的外部使用成员内部类
Outer. Inner ine= ou.new Inner();
ine.Method();
class Outer{
int x= 10,y= 40
class Inner{//定义一个成员内部类
intx=100,z= 50;
public void Method(){
System. out.println("Outer. x= "+ Outer. this. x+ 13.
"\tInner. x= "+ this. x+ "\ny= "+ y+ "\tz="+ z);
Tip:要先实例化外部类,然后用实例化的外部类对象实例化成员内部类对象(外部类的方法里创建内部类对象)
匿名内部类
为存在于某个类中且没有名称的类。实际为匿名子类的对象。
创建前提:继承一个类或实现一个接口。
new 类名(父)/接口名 ()
{
实现抽象方法
}
Tip:在写匿名内部类的大括号后,一定要加个语句号“;”。
new F1(){
void cxff()
{
System.out.println(x);
}.cxff();
F1 f=new F1()
void cxff()
{
System.out.println(x);}};
}
};
f.cxff();