Java中的内部类(开发中常用,为重点)

来源:互联网 发布:阿里云os电视软件下载 编辑:程序博客网 时间:2024/06/01 07:54

1.   内部类

(1)   什么叫内部类:在一个类的内部还存在一个类。如果在类Outer的内部在定义一个类Inner,此时类Inner就称为内部类,而类          Outer则称为外部类

(2)  内部类可以声明成public 或private。而当内部类声明成public 或private时,对其访问限制与成员变量和成员方法完全相同。

(3)  内部类的定义格式


标识符  class  外部类的名称{

//外部类成员

标识符  class  内部类的名称{

//内部类的成员

}

}


2.以下的程序中,InnerDemo类作为Outer类的内部类存在,并且在外部类的fun()方法中直接实例化内部类的对象,并调用了print()方法。

代码如下:

public class Inner {

public static void main(String[] args) {

new Outer().fun();//调用外部类的fun()方法

}

}

class Outer{//定义外部类

private String info = "hello,nishui";//定义外部类的私有属性

class InnerDemo{//定义内部类

public void print(){//定义内部类的的方法

System.out.println(info);//直接访问外部类的私有属性

}

}

public void fun(){//外部类的方法

new InnerDemo().print();//调用内部类的方法

}

}

运行结果:

hello,nishui


3.内部类存在的优点,缺点

(1) 缺点:正常的一个类操作时,在类中最好只定义属性或者方法,如果定义一个类的话,则肯定破坏了程序的一个结构。

(2) 优点:是可以方便的访问 外部类中的私有属性!


4.内部类是无法在外部直接调用的,是无法按照外部类的形式使用的。

笔者在前面说过static静态声明属性或者方法,这里同样使用static来声明内部类。

如果一个内部类使用static关键字声明的话,则此内部类就可以被称之为外部类!可以直接通过“外部类.内部类”进行访问。

举例:

public class Inner3 {

public static void main(String[] args) {

new Outer2.InnerDemo2().print();//调用外部类的fun()方法

}

}
class Outer2{//定义外部类

private static String info = "hello,nishui";//定义外部类的私有属性

static class InnerDemo2{//使用static定义内部类为外部类

public void print(){//定义内部类的的方法

System.out.println(info);//直接访问外部类的私有属性

}

}

public void fun(){//外部类的方法

new InnerDemo2().print();//调用内部类的方法

}

}

总结:使用static可以声明一个内部类,声明的内部类就成为外部类,可以直接在类的外部调用,但是如果要想访问外部类中的属性,则此属性必须是static访问权限的。


5.  在外部访问内部类,不使用static

一个内部类除了可以通过外部类访问,也可以直接在其他类中调用,但是调用的格式为:

外部类.内部类   内部类对象  =    外部类实例.new   内部类();

举例:

public class Inner5 {

public static void main(String[] args) {

Outer11 out = new Outer11();//外部类的实例化

Outer11.Inner11 in = out.new Inner11();

in.print();

}

}

class Outer11{//定义外部类

private String info = "hello,nishui";//定义外部类的私有属性

class Inner11{//定义内部类

public void print(){//定义内部类的的方法

System.out.println(info);//直接访问外部类的私有属性

}

}

public void fun(){//外部类的方法

new Inner11().print();//调用内部类的方法

}

}

运行结果:hello,nishui


6.在方法中定义内部类

一个内部类可以在任意的位置上定义,下面来了解一下在方法中定义内部类

举例:

public class Inner1 {

public static void main(String[] args) {

new OuterTest().fun();

}

}

class OuterTest{//外部类

private String info = "hello";

public void fun(){//在方法中定义内部类

class InnerTest{

public void print(){//定义内部类的的方法

System.out.println(info);//直接访问外部类的私有属性

}

}

new InnerTest().print();

}

}


7.在一个方法中定义内部类,而这个内部类想要访问这个方法中的参数的方法是加上final关键字!

举例:

public class Inner6{

public static void main(String[] args) {

new OuterTest1().fun(30);

}

}

class OuterTest1{//外部类

private String info = "hello";

public void fun(final int temp){//在方法中定义内部类

class InnerTest1{

public void print(){//定义内部类的的方法

System.out.println(info);//直接访问外部类的私有属性

System.out.println(temp);

}

}

new InnerTest1().print();

}

}

运行结果:

hello
30


8.   内部类在实际开发中作用很大,常用到,所以建议读者熟记。

在java系统中也会常看见使用static声明内部类的情况,一定要记住,使用static声明的内部类是外部类,操作的时候要使用“外部类.内部类”的形式访问!


0 0
原创粉丝点击