java中的内部类

   内部类:顾名思义就是内部里面的一个类,有内部类的话自然就会有外部类了.

   内部类的主要特点:

                                  1)   方便的访问外部类的私有属性

                                  2)   能把里面的重要内容完全的封装起来

                                  ------- 内部类的使用方式有很多种,其中有加上static等价于外部类一样使用,以及 声明在方法之中的时候,如果想从外部函数向内部类之中传递参数的话,就需要用final申明参数  等等。。。。。。

代码1:

package java2实用教程练习;


class Outer {
<span style="white-space:pre">	</span>private String name = "Victent";


<span style="white-space:pre">	</span>class Inner {
<span style="white-space:pre">		</span>public void print() {
<span style="white-space:pre">			</span>System.out.println("name" + "-->" + name);
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public void fun() {
<span style="white-space:pre">		</span>new Inner().print();
<span style="white-space:pre">	</span>}
}


public class Demo1 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>new Outer().fun();
<span style="white-space:pre">	</span>}
}
代码2:

package java2实用教程练习;


class Outer {
<span style="white-space:pre">	</span>private String name = "Victent";


<span style="white-space:pre">	</span><span style="color:#ff0000;">public String getName() {
<span style="white-space:pre">		</span>return this.name;
<span style="white-space:pre">	</span>}</span>


<span style="white-space:pre">	</span>public void fun() {
<span style="white-space:pre">		</span>new Inner(<span style="color:#ff0000;">this</span>).print();
<span style="white-space:pre">	</span>}
}


class Inner {
<span style="white-space:pre">	</span><span style="color:#ff0000;">private Outer out;


<span style="white-space:pre">	</span>public Inner(Outer out) {
<span style="white-space:pre">		</span>this.out = out;
<span style="white-space:pre">	</span>}</span>


<span style="white-space:pre">	</span>public void print() {
<span style="white-space:pre">		</span>System.out.println("name" + "-->" + <span style="color:#ff0000;">this.out.getName()</span>);
<span style="white-space:pre">	</span>}
}


public class Demo1 {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>new Outer().fun();
<span style="white-space:pre">	</span>}
}
两段代码都能实现相同的功能,但是第二段代码就显得比较麻烦了.... 这就是内部类的优点之一,能够轻松的访问外部类的私有属性.

第二点: 能把里面的重要内容完全的封装起来

代码: 3

public interface Contents {
	int value();
}

public interface Destination {
	String readLabel();
}

public class Goods {
	private class Content implements Contents {
		private int i = 11;

		public int value() {
			return i;
		}
	}

	protected class GDestination implements Destination {
		private String label;

		private GDestination(String whereTo) {
			label = whereTo;
		}

		public String readLabel() {
			return label;
		}
	}

	public Destination dest(String s) {
		return new GDestination(s);
	}

	public Contents cont() {
		return new Content();
	}
}

class TestGoods {
	public static void main(String[] args) {
		Goods p = new Goods();
		Contents c = p.cont();
		Destination d = p.dest("Beijing");
	}
}
这段代码就完全的把内部类的属性什么的都给封装了起来....  在 方法中完全的看不到内部类的名字....

上面使用的都是一类的声明方式,下面写出第二种方式:

代码:

class A{
   class B{
  }
}
public class Demo{
    public static void main(String args[]){
     A a = new A() ;
     A.B b = a.new B(); 
}
}

其他特性:

     第一点:   内部类加上static等价于外部类一样使用。

代码:

class A{
   static class B{
  }
}
public class Demo{
    public static void main(String args[]){
     A.B b =new A.B(); 
}
}

这个时候声明的方式中就可以不必须的先声明外部类了。。。。

   第二点: 声明在方法之中的时候,如果想从外部函数向内部类之中传递参数的话,就需要用final申明参数。

代码:

package java2实用教程练习;
class A {
	public void fun(final String name) {
		class B {
			public void fun1() {
				System.out.println(name);
			}
		}
		new B().fun1();
	}
}

public class Demo1 {
	public static void main(String args[]) {
		new A().fun("Victent");
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值