您的位置:首页 > 编程语言 > Java开发

java学习日记_49:内部类的位置和访问方式

2016-10-17 20:02 260 查看

/*

内部类位置

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

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

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

*/

class Outer {

private int num = 10;

//成员位置

/*

class Inner {

}

*/

public void method() {

//局部位置

class Inner {

}

}

}

class InnerClassDemo2 {

public static void main(String[] args) {

}

}

————————

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

/*

成员内部类:



如何直接访问内部类的成员。(可以有直接和间接两种方式来访问成员内部类)



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

*/

class Outer {

private int num = 10;

class Inner {

public void show() {

System.out.println(num);

}

}

}

class InnerClassDemo3 {

public static void main(String[] args) {

//需求:我要访问Inner类的show()方法

//Inner i = new Inner();

//i.show();

//格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

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

oi.show();

}

}

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

/*

成员内部类的修饰符:



private 为了保证数据的安全性



static 为了方便访问数据



注意:静态内部类访问的外部类数据必须用静态修饰。



案例:我有一个人(人有身体,身体内有心脏。)

class Body {

private class Heart {

public void operator() {

System.out.println("心脏搭桥");

}

}

public void method() {

if(如果你是外科医生) {

Heart h = new Heart();

h.operator();

}

}

}

按照我们刚才的讲解,来使用一下

Body.Heart bh = new Body().new Heart();

bh.operator();

//加了private后,就不能被访问了,那么,怎么玩呢?

Body b = new Body();

b.method();

*/

class Outer {

private int num = 10;

private static int num2 = 100;

//内部类用静态修饰是因为内部类可以看出是外部类的成员

public static class Inner {

public void show() {

//System.out.println(num);

System.out.println(num2);

}

public static void show2() {

//System.out.println(num);

System.out.println(num2);

}

}

}

class InnerClassDemo4 {

public static void main(String[] args) {

//使用内部类

// 限定的新静态类

//Outer.Inner oi = new Outer().new Inner();

//oi.show();

//oi.show2();

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

//格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();

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

oi.show();

oi.show2();

//show2()的另一种调用方式

Outer.Inner.show2();

}

}

-————————————

/*

局部内部类



A:可以直接访问外部类的成员



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



面试题:



局部内部类访问局部变量的注意事项?



A:局部内部类访问局部变量必须用final修饰



B:为什么呢?



局部变量是随着方法的调用而调用,随着调用完毕而消失。



而堆内存的内容并不会立即消失。所以,我们加final修饰。



加入final修饰后,这个变量就成了常量。既然是常量。你消失了。



我在内存中存储的是数据20,所以,我还是有数据在使用。

*/

class Outer {

private int num = 10;

public void method() {

//int num2 = 20;

//final int num2 = 20;

class Inner {

public void show() {

System.out.println(num);

//从内部类中访问本地变量num2; 需要被声明为最终类型

System.out.println(num2);//20

}

}

//System.out.println(num2);

Inner i = new Inner();

i.show();

}

}

class InnerClassDemo5 {

public static void main(String[] args) {

Outer o = new Outer();

o.method();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐