内部类:顾名思义就是内部里面的一个类,有内部类的话自然就会有外部类了.
内部类的主要特点:
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");
}
}