zoukankan      html  css  js  c++  java
  • 内部类

    内部类(当作类中的一个普通成员变量,只不过此成员变量是class的变量类型)

                一个java文件中可以包含多个类,但是只能有一个public class。

               如果一个类定义在另一个类的内部,此时可以称之为内部类。

     1 public class Demo{
     2     private int id;
     3     private String name;
     4     public void test(){
     5         System.out.println("test");
     6     }
     7     
     8     class InnerClass{
     9         private int age;
    10         public void show(){
    11             System.out.println("show");
    12         }
    13     }
    14 }
    InnerClass

    使用:外部类.内部类 内部类名 = new 外部类().new 内部类();

    1 public class TestInner{
    2     public static void main(String agrs[]){
    3         Demo.InnerClass inner = new Demo().new InnerClass();
    4         inner.show();
    5     }
    6 }
    TestInner

    特点:内部类可以方便的使用外部类的私有属性;

               外部类不能访问内部类的私有属性,但是如果创建了内部类的对象,此时可以在外部类中访问私有属性;

               内部类中不能定义静态属性;

               当内部类和外部类具有相同的私有属性时,在内部类访问时,可直接访问内部类的私有属性,要想访问外部类时需要  外部类.this.属性名

     1 package com.test.InnerClass;
     2 
     3 public class Demo {
     4     private int id=1;
     5     private String name="tom";
     6     private int age;
     7     public void test(){
     8         System.out.println("test");
     9         InnerClass inner = new InnerClass();
    10         System.out.println("不能直接调用内部类私有属性,可以通过创建内部类对象调用age:"+inner.age);
    11     }
    12 
    13     class InnerClass{
    14         private int age=15;
    15         public void show(){
    16             System.out.println("show");
    17             System.out.println("直接调用外部类id:"+id);
    18             test();
    19             System.out.println("内部类age:"+age);
    20             System.out.println("外部类age:"+Demo.this.age);
    21         }
    22     }
    23 }
    InnerClass01

    分类(重要):1、匿名内部类。

                                    当定义一个类,实现了某个接口时,在使用过程中只需要使用一次,没有其他用途,再考虑到代码的简洁,可以不特意创建一个类,而使用new interface(){(实现未实现的方法)},就叫匿名内部类。

                                  

               2、静态内部类。

                                     在内部类中可以定义静态内部类,使用static关键字修饰,使用规则  外部类.内部类 内部类名字 = new 外部类.内部类();

     1 package com.test.InnerClass;
     2 
     3 public class Demo01 {
     4     private int id;
     5     public void test(){
     6         System.out.println("test");
     7     }
     8 
     9     public static void main(String[] args) {
    10         Demo01.InnerClass01 inner = new Demo01.InnerClass01();
    11         inner.show();
    12     }
    13 
    14     static class InnerClass01{
    15         private int age;
    16         public void show(){
    17             System.out.println("static内部类的show");
    18         }
    19     }
    20 }
    staticInnerClass

               3、方法内部类

                                     在外部类的方法中也可以定义内部类(作为了解),使用时需要注意,只能在方法中创建对象,因为此class的作用域就是该方法。

     1 package com.test.InnerClass;
     2 
     3 public class Demo01 {
     4     private int id;
     5     public void test(){
     6         System.out.println("test");
     7         class InnerClass03{
     8             private int age;
     9             public void show(){
    10                 System.out.println("方法内部类的show");
    11             }
    12         }
    13         InnerClass03 inner = new InnerClass03();
    14         inner.show();
    15     }
    16 }
    methodInnerClass
     1 package com.test.InnerClass;
     2 
     3 public class Test {
     4     public static void main(String[] args) {
     5 //        Demo.InnerClass inner = new Demo().new InnerClass();
     6 //        inner.show();
     7 
     8         Demo01 demo01 = new Demo01();
     9         demo01.test();
    10     }
    11 }
    Test
  • 相关阅读:
    [SQLSERVER2005 ERROR]"附加数据库 对于 服务器“GNPC”失败"
    家用视频监控设备
    Layer Two Tunneling Protocol "L2TP"
    [转]char类型和string类型(C++,C#)
    Layer 2 Tunneling Protocol
    坚持坚持。。。
    转载几篇有用的文章
    常用的SQL语句(转载)
    python判断一个字符是否是xml合法字符
    搜索引擎推荐
  • 原文地址:https://www.cnblogs.com/bentuzi/p/12622953.html
Copyright © 2011-2022 走看看