内部类与局部内部类

内部类与局部内部类

1、什么是内部类

将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

1.成员内部类 :定义在类中方法外的类。

定义格式:

  class 外部类 {

         class内部类{

}

}       

 

2.访问特点

内部类可以直接访问外部类的成员,包括私有成员。 外部类要访问内部类的成员,必须要建立内部类的对象。

创建内部类对象格式:    

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

举例代码:

1.内部类

package DemoTest.DemoTest2;
public class person {
    private String name;
        public class xianren{
            public void XianShow(){
                System.out.println("仙人模式!");
                System.out.println("我叫"+name);
            }
        }

public void show(){
        System.out.println("间接调用内部类!");
        xianren xr = new xianren();
        xr.XianShow();
    }

    public person() {
    }
    public person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

2.测试类

package DemoTest.DemoTest2;

public class Test {
    public static void main(String[] args) {

//第一种调用方法
        person p = new person();
        p.setName("鸣人");
        p.show();
        System.out.println("========================");

//第二种调用方法
        person.xianren x = p.new xianren();
        x.XianShow();
        System.out.println("========================");

//第三种调用方法
        //外部类名.内部类名 对象名=new 外部类名().new 内部类名()
        person.xianren obj= new person("鸣人").new xianren();
        obj.XianShow();
    }
}

3.结果:

间接调用内部类!

仙人模式!

我叫鸣人

========================

仙人模式!

我叫鸣人

========================

仙人模式!

我叫鸣人

 

举例代码2:

获取不同地址的值

1.不同位置的num
public class Denoquzhi {
    int num=10;
    class Quzhi{
        int num=20;
        public void print(){
            int num=30;
            System.out.println(num);
            System.out.println(this.num);
            System.out.println(Denoquzhi.this.num);
        }
    }
    public void da(){
        System.out.println("间接调用");
        Quzhi q = new Quzhi();
        q.print();
    }
}

2.测试类

package DemoTest.Demoquzhi;

public class Teat {
    public static void main(String[] args) {

//间接调用
        Denoquzhi d = new Denoquzhi();
        d.da();
        System.out.println("===================");

//格式规定的直接调用
        Denoquzhi.Quzhi dui=new Denoquzhi().new Quzhi();
        dui.print();
    }
}

3.结果:

间接调用

30

20

10

===================

30

20

10

 

2、局部内部类

举例代码:

1.在类的方法内包含了一个内部类

package DemoTest.DemoSamill;

public class Demosamill {
    public void method(){
        class MethodClass{
            int num=10;
            public void print(){
                System.out.println("局部内部类");
                System.out.println(num);
            }
        }
        MethodClass m = new MethodClass();
        m.print();
    }
}

2.测试类

package DemoTest.DemoSamill;

public class Test {
    public static void main(String[] args) {
        Demosamill d = new Demosamill();
        d.method();
    }
}

3.结果

局部内部类

10

 

 

 

 

 

你可能感兴趣的:(java基础)