(14)Java学习笔记——面向对象07——内部类

来源:互联网 发布:ubuntu查看jdk 编辑:程序博客网 时间:2024/06/14 11:17

内部类

将一个类定义在另外一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)


内部类的访问特点:

1/内部类可以直接访问外部类中的成员,包括私有。

2/外部类要访问内部类,必须建立内部类的对象


一般用于类的设计。

分析事物时,发现该事物描述中还有事物,而且这个事物还只访问被描述事物的内容。

这时就把还有的事物定义成内部类来描述。


范例01:

class InnerClassDemo01 {public static void main(String[] args) {Outer out = new Outer();out.method();}}class Outer//外部类{private int num = 3;class Inner//内部类{void show(){System.out.println("show num="+num);}}public void method()//创建一个内部类的对象,用于访问内部类{Inner in = new Inner();in.show();}}

内部类的位置:

----| 成员位置:在成员位置的定义的类,被称为成员内部类。

----| 局部位置:在局部位置定义的类,被称为局部内部类。


范例:02 (内部类的位置)

class Outer{private int num = 10;//成员位置class Inner//成员内部类{}public void method(){//局部位置class Inner//局部内部类{}}}


————————————————

成员内部类


直接访问外部类中的内部类中的成员

格式:

外部类名 . 内部类名   对象名  =  new  外部类对象 .  new 内部类对象;

Outer  .  Inner   in = new  Outer() . new Inner() ;

in.show();


范例03:(直接访问外部类中内部类的方法)

/*直接访问外部类中内部类的成员方法*/class Outer//定义一个外部类{private int num = 10;class Inner//定义一个成员内部类{public void show(){System.out.println(num);}}}class InnerClassDemo_03 {public static void main(String[] args) {Outer.Inner oi = new Outer().new Inner();//通过此格式直接访问外部类中内部类的成员方法oi.show();}}

成员内部类的修饰符:

a / private 为了保证数据的安全性

b / static 为了让数据更方便访问

----| 被静态修饰的成员内部类只能访问外部类的静态成员

----| 成员内部类被静态修饰后的访问方式:

格式:

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

Outer . Inner in = new Outer . Inner();

in.show();


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

内部类和外部类没有继承关系。


——————————————————

局部内部类

----| 可以直接访问外部类的成员

----| 在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

----| 局部内部类访问的局部变量必须被final修饰


范例01:

class InnerClassTest03 {public static void main(String[] args) {Outer out = new Outer();out.method();}}class Outer{int num = 3;void method(){final int x = 9;//从内部类中访问局部变量,需要被声明为最终类型finalclass Inner//局部内部类{void show(){System.out.println("show...."+x);}}Inner in = new Inner();//定义一个局部内部类的对象in.show();}}


————————————————————————————————————————————————————

匿名内部类


匿名内部类就是内部类的简写格式(匿名对象是对象的简写格式)


前提:

存在一个类或者接口

---|这个类可以是具体类也可以是抽象类。


格式:

new 类名 或者 接口名()

{

       重写方法;

};


匿名内部类的本质:

是一个继承了该类伙着实现了该接口的子类匿名对象。


范例:

interface Inter//定义一个接口{public abstract void show();public abstract void show2();}class Outer{public void method(){Inter i = new Inter()//匿名内部类的格式: new 类名或接口名(){重写方法};匿名内部类本质是该类的子类匿名对象。用到多态。{public void show(){System.out.println("show");}public void show2(){System.out.println("show2");}};//注意这里有分号i.show();i.show2();}}class InnerDemo_04 {public static void main(String[] args) {Outer o = new Outer();o.method();}}










0 0