内部类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() ;
  }
}


目录
相关文章
|
2月前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
14 0
|
2月前
|
Java 编译器
java中常见的几种内部类,你会几个?(未完)
java中常见的几种内部类,你会几个?(未完)
14 1
|
5月前
|
Java 数据安全/隐私保护
【零基础学Java】—内部类的概念与分类(三十)
【零基础学Java】—内部类的概念与分类(三十)
|
20天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
38 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
22天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
10 0
|
22天前
|
存储 Java
java接口和内部类
java接口和内部类
|
2月前
|
Java 编译器
详解java各种内部类
详解java各种内部类
|
2月前
|
设计模式 Java
JAVA内部类
JAVA内部类
11 1
|
3月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
|
5月前
|
Java
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
40 0