内部类

转载 2018年04月15日 23:23:40
 1.成员内部类。

(1)成员内部类的实例化:

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

class Person{
  class Test{
   }
 }
 Person p=new Person();
 Person.Test t=p.new Test();

(2)在内部类中访问外部类属性或方法。

  外部类名.this.属性名
   Person.this.name
(3)成员内部类声明的注意事项
  ①内部类不能与外部类重名。
  ②成员内部类中不能出现静态属性,静态方法和静态内部类。
     但是静态常量例外。
 private static final String name="1";//此情况可以使用

复制代码
class Test{//成员内部类
        private  String  name;
        private int age;
        public void say(){
            System.out.println(Person.this.name);//访问外部类的
            System.out.println("Person中的Test的say方法");
        }
    }
复制代码

2.静态内部类。

(1)使用static修饰的内部类,叫做静态内部类。

(2)实例化:外部类名.内部名 变量=new 外部类名.内部类名();

复制代码
class Person{
     public String name="1";
     public Static int age="12";
         static class Test{
     } 
      }
      Person.Test t=new Person.Test();
复制代码

   注意与成员内部类实例化的区别。

(3)静态内部类中不能访问外部类的非静态属性和方法。

   但可以访问外部类中的静态属性和方法,使用外部类名.属性名;
     Person.age;

(4)外部类不能访问静态内部类的非静态属性和方法,但可以访问静态内部类的的静态属性和方法,外部类名.属性名。

    Test.age;

(5)【静态内部类和成员内部类的区别】

  1.声明方式和实例化方式不同。成员内部类不带static
     静态内部类实例化: Person.Test t=new Person.Test();
     成员内部类实例化: Person.Test t=p.new Test();
  2.成员内部类中不能出现静态属性和方法,但静态内部类可以。
  3.外部类和内部类的互相访问权限不同:
    ①静态内部类中不能访问外部类的非静态属性和方法。
    但可以访问外部类中的静态属性和方法,使用外部类名.属性名;
    ②成员内部类中不能出现静态属性,静态方法和静态内部类。
    但是静态常量例外。

复制代码
static class Test1{
        public static String test="111";
        
        public void say(){
            System.out.println("Test1");
        }
    }
复制代码

3.【局部内部类】(一般不用)。

(1)定义在某个类中的方法中的内部类,称为局部内部类。
(2)局部内部类是对外部完全隐藏的,只能在其作用域范围内被实例化。
(3)局部内部类可以访问外部类的属性和方法,使用外部类.this.属性名;
  Person.this.name;
(4)局部内部类:不能访问其所在方法中的变量,只能访问常量。
(5)注意:局部内部类不能使用访问修饰符修饰,因为它不属于类的成员,它属于方法中的局部变量。

复制代码
public void eat(){
//        final String name1="123";
        class Test2{
            public String name="123";
            public void test(){
                System.out.println(Person.this.name);
//                System.out.println(name1);
            }
        }
        Test2 t=new Test2();
        System.out.println(t.name);
    }
    
}
复制代码

4.匿名内部类。

new Test1(){

 };
(1)写法
(2)含义:相当于一个匿名类继承了Test1类,使用匿名内部类将直接返回当前子类的对象。
Test1 t=new Test1(){};
(3)相当于:①一个匿名内部类,继承了Test1类。
        ②匿名内部类返回一个子类对象,并付给父类引用。
    因此这一行代码用于向上转型。
(4)匿名内部类通常用于直接实例化抽象类或接口。
  Test1 t=new Test1(){
     //重写抽象类Test1中的所有的抽象方法
    //相当于一个匿名内部类,继承了Test1类,然后返回这个匿名内部类的对象。
};

复制代码
Test1 t2=new Test1(){
            public int age=12;
            public void eat(){
                System.out.println(age);
                System.out.println("eat");
            }
            public void say(){
                System.out.println("匿名重写Test1类的say方法");
            }
        };
        //向上转型,会丢失掉子类特有的属性和方法,new Test1(){}.eat();
        t2.say();
复制代码

5.使用内部类模拟多继承 。

复制代码
class A{
    public void a() {
        System.out.println("a");
    }
}
class B{
    public void b(){
        System.out.println("b");
    }
}
class C{
    class A1 extends A{
        
    }
    class B1 extends B{
        
    }
    public  void a(){
        new A1().a();//不管A类是不是抽象类都可以,如果是A则要考虑是不是抽象类
    }
    public void b(){
        new B1().b();
    }
}
复制代码
C c=new C();  //结果a,b
c.a();
c.b();

Java内部类(DOC)

  • 2009年10月21日 13:31
  • 57KB
  • 下载

内部类的分类和使用内部类的好处

一、内部类的分类 内部类主要分为普通内部类、局部内部类、匿名内部类、嵌套内部类(静态内部类)。 1普通内部类(成员内部类) 内部类与普通类的区别:1)内部类的名字是嵌套在外部类中的;2)外部类将有一...
  • u010339647
  • u010339647
  • 2016-01-11 15:32:39
  • 3352

内部类的单例模式

* 上面的单例实现存在小小的缺陷,那么 有没有一种方法,既能够实现延迟加载,又能够  * 实现线程安全呢?  *       还真有高人想到这样的解决方案了,这个解决方案被称为Lazy initial...
  • ygl6150373
  • ygl6150373
  • 2016-11-20 16:39:41
  • 1058

python内部类

#!/usr/bin/python class outerclass: msg = "I am outer class" class interclass: m...
  • u013551220
  • u013551220
  • 2014-02-13 10:30:20
  • 1603

【spring教程之六】spring注入内部类

1、首先就是内部类的声明 package com.test.pro; public class Singer { private Load load; //调用内部类 public v...
  • jianghuihong2012
  • jianghuihong2012
  • 2015-03-21 12:37:15
  • 2745

内部类的.this和.new

1.在内部类中,外部类名+.this是生成外部类对象的引用。此会在编译器受检,没有任何运行时开销。 package Inner; public class DotThis { void f(){...
  • u011514810
  • u011514810
  • 2016-04-23 11:55:44
  • 1134

java 四种内部类 使用细节(含代码)

一: 内部类     定义在类体部,方法体部,甚至比方法体更小的代码块内部的类(if 语句里面等)     1.静态内部类(内部类中最简单的形式)         1.声明在类体部,方法体外,并...
  • qq_33599978
  • qq_33599978
  • 2017-04-27 23:28:19
  • 5436

C++之内部类

1. 内部类:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。 即说...
  • u013696062
  • u013696062
  • 2014-11-04 17:02:17
  • 6322

关于在外部对内部类进行实例化和引用

有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。 例如: class A{...
  • qq_26918031
  • qq_26918031
  • 2016-10-06 16:47:57
  • 2278
收藏助手
不良信息举报
您举报文章:内部类
举报原因:
原因补充:

(最多只允许输入30个字)