内部类java

简介: 内部类java

内部类概述


把类定义在其他类的内部,这个类就被称为内部类。 举例:在类A中定义了一个类B,
类B就是内部类。
 内部类的访问特点: 内部类可以直接访问外部类的成员,包括私有。 
 外部类要访问内部  类的成员,必须创建对象。


内部类的分类

成员内部类:在类中的成员位置

局部内部类:在方法的局部位置

class Outer{
  //成员位置
  //成员内部类
  class Inter{
  } 
  //Outer的成员方法
  public void method(){
    //局部内部类
    class Inter2{ 
    }
  } 
}
class OuterDemo2{
  public static void main(String[] args){
  }
}


成员内部类

/*
  成员内部类(非静态)的访问特点:
    外部类名.内部类名 对象名 = 外部类对象.内部类对象;
*/
//定义外部类
class Outer{
  private int num = 20 ;  
  //成员内部类
    class Inter{
    public void show(){
      System.out.println("show inter...") ;
    }
  }
}
//测试
class OuterDemo3{
  public static void main(String[] args){
    //需求:访问外部类中的内部类的成员
    //Inter i = new Inter() ; 
    //i.show() ;  
    //外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    Outer.Inter oi = new Outer().new Inter() ;
    oi.show() ;
  }
}


/*
  成员内部类(静态)的访问特点:
    外部类名.内部类名 对象名 = new 外部类名.内部类名();
*/
//外部类
class Outer{
  public int num = 10 ;
  public  static int num2 = 30 ;
  //有静态的成员内部类
  public static class Inter{  //成员内部类被静态修饰,可以看成是外部类的一个成员
    public void show(){
      //System.out.println(num) ; //无法从静态上下文中引用非静态 变量 num
      System.out.println(num2) ;
    }
    public static void show2(){
      //System.out.println(num) ;//无法从静态上下文中引用非静态 变量 num
      System.out.println(num2) ;
    }
  }
}
//测试
class OuterDemo4{
  public static void main(String[] args){
    //外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    //Outer.Inter oi = new Outer().new Inter() ;//限定的新静态类   不适合静态的成员内部类
    //外部类名.内部类名 对象名 = new 外部类名.内部类名();
    Outer.Inter oi = new Outer.Inter() ;
    oi.show();
    oi.show2();
    System.out.println("------------") ;
    //show2()的访问方式:属于Inter的静态成员  Inter.show2();
    //将Inter整体看成是外部类的成员(static修饰了)
    //链式编程格式
    Outer.Inter.show2();
  }
}


局部内部类

1)可以访问外部类成员,包括私有
  2)在外部类局部位置可以去访问局部内部类成员,创建该内部类对象,使用对象访问


class Outer{
  private int num = 10 ;
  //成员方法
  public void method(){
    //局部变量
     int num2 = 50 ;
  //局部内部类
    class Inner{ //内存中 可能要被new 类名()  
      public void show(){
        System.out.println(num) ;//10
        System.out.println(num2) ;
      }
    }   
    Inner i = new Inner();
    i.show() ;    
  }
}
//测试
class OuterDemo5{
  public static void main(String[] args){
    //创建外部类对象
    Outer o = new Outer();
    o.method() ;
  }
}

匿名内部类:

  前提条件:
    存在一个类或者接口
    类:可以具体类,可以是抽象类
格式:
  new 类名或者接口名(){
      重写方法;
  } ;


interface Inter{
  public abstract void show() ;
  public abstract void show2() ;
}
class Outer{
  //成员方法
  public void method(){
    //使用匿名内部类的方式实现接口中的show(){}
    /*
      new 类名或者接口名(){
        重写方法;
      }
    */
    //整个部分:new 接口名(){重写方法} ;  就是一个子实现类对象
    //接口中只有一个抽象方法
    /*
    new Inter(){
      public  void show() {
        System.out.println("show Inter...") ;
      }
    }.show() ;
    */
    //如果接口中的有多个抽象方法
    /*
    new Inter(){
      public  void show() {
        System.out.println("show Inter...") ;
      }
      public  void show2() {
        System.out.println("show Inter...") ;
      }
    }.show();
    new Inter(){
      public  void show() {
        System.out.println("show Inter...") ;
      }
      public  void show2() {
        System.out.println("show2 Inter...") ;
      }
    }.show2();
    */
    //直接使用对象名调用多个抽象
    Inter i = new Inter(){
      public void show(){
        System.out.println("show Inter...") ;
      }
      public  void show2() {
        System.out.println("show2 Inter...") ;
      }
    };
    //调用
    i.show();
    i.show2();
  }
}
//测试
class OuterDemo6{
  public static void main(String[] args){
    Outer o = new Outer() ;
    o.method() ;
  }
}


目录
相关文章
|
11天前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
25 5
|
5天前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
1月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
26 6
|
2月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
19 2
|
2月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
2月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
18 2
|
2月前
|
Java
Java内部类相关内容总结和解读
Java内部类相关内容总结和解读
22 0
|
2月前
|
存储 Java
Java 五种内部类演示及底层原理详解
Java 五种内部类演示及底层原理详解
16 0
|
2月前
|
Java 编译器 程序员
Java基础9-深入理解Java内部类及其实现原理
Java基础9-深入理解Java内部类及其实现原理
16 0
|
2月前
|
Java
【Java基础】 内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
21 0