现在的位置: 首页 > 综合 > 正文

别样JAVA学习(六)继承下(2.0)内部类上

2018年11月02日 ⁄ 综合 ⁄ 共 1944字 ⁄ 字号 评论关闭

前面了解了上帝Object类,接下来我们学习内部类,

1、内部类-概述

定义:

从名字上我们直观分析,就是一个类我们直接定义到另一个类里面,

对里面那个类就称为内部类(内置类,嵌套类)。

好吧,那么我们现在就写一个内部类出来感受一下,


为什么:

内部类不放也可以,但是你放进去有个好处,

你有没有发现如果你放到外面来的话,我想访问访问Outer里面的x变量、method()方法,

我是不是需要在Inner类当中创建Outer对象,才能访问Outer中的资源。

class Outer
{
	int x=3;

	void method()
	{
		System.out.println(x);
	}
}
class Inner
{
	Outer out=new Outer();
        void function()
	{
		System.out.println("inner :"+out.x);
	}
}


放进Outer类,Inner访问x变量是不是可以直接访问。就像孙悟空

要想访问牛魔王的心脏,是不是要先找到牛魔王,再找到其心脏。

是不是牛魔王.get心脏方法。但当孙悟空跑到牛魔王肚子之后,

是不是可以直接访问牛魔王心脏。

这么做:

class Outer
{
	private int x=3;
	
	class Inner
	{
		void function()
		{
			System.out.println("inner :"+x);//无公私有都可以访问
		}
	}
	
	void method()
	{
		System.out.println(x);
	}
}

这也就是内部类特点。


2、内部类访问规则

内部类的访问规则:

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

2,外部类要访问内部类呢,必须建立内部类对象。

class Outer
{
	private int x=3;
	
	class Inner
	{
		void function()
		{
			System.out.println("inner :"+x);//无公私有都可以访问
		}
	}
	
	void method()
	{
		Inner in=new Inner();
                in.function();
	}
}

我们其他类可不可以直接访问内部类中成员呢?这样,

class InnerClassDemo
{
	public static void main(String[] args)
	{
		Outer.Inner in=new Outer().new Inner();
		in.function();
	}
}

一般不这么干,但面试可能会问。


class Outer
{
	private int x=3;
	
	class Inner
	{
		int x=4;
		void function()
		{
			int x=6;
			System.out.println("inner :"+x);
		}
	}
	
	void method()
	{
		System.out.println(x);
	}
}

打印出来的是6,内部有就不出去找;如果要得出4,x前面加this;

3呢?Outer.this.x。

原理:内部类之所以可以直接访问外部类成员,是因为持有外部类的引用,格式:外部类名.this。


访问格式:

1,当内部类定义在外部类的成员位置上,而且非私有。

可以在外部其他类中,直接建立内部类对象。

格式:

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

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

静态内部类

2,当内部类在成员位置上,就可以被成员修饰符所修饰。

        比如,private:将内部类在外部类中进行封装。

                   static:内部类就具备了静态特性。

                               当内部类被静态修饰后,只能访问外部类中的static成员,

                               当外部类其他成员都是static时,不涉及特有数据。

                               但是静态内部类出现不多,因为有访问局限。

                              

                               在外部其他类中,我们如何访问静态内部类的非静态成员呢?

                               此时不需对象,类名可直接调用。

new Outer.Inner().function();

                                在外部其他类中,我们如何访问静态内部类的静态成员呢?

new Outer.Inner().function(); 或 Outer.Inner.function();

         注意,当内部类中定义了静态成员,该内部类必须是static的。

                    当外部类中的静态方法访问内部类时,内部类也必须是static的。

抱歉!评论已关闭.