类的内部成员之五:内部类

简介: 类的内部成员之五:内部类

类的内部成员之五:内部类

内部类:把类定义在其他类的内部

内部类特点:

A:内部类可以直接访问外部类的成员,包括私有

B:外部类要访问内部类的成员,必须创建对象

内部类的位置

成员位置:定义在成员位置的类,称为成员内部类

局部位置:定义在局部位置的类,称为局部内部类

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

举例

class Outer {
  private int s;
  public class Inner {
    public void mb() {
    s = 100;
    System.out.println("在内部类Inner中s=" + s);
  }
}
public void ma() {
  Inner i = new Inner();
  i.mb();
  }
}
public class InnerTest {
  public static void main(String args[]) {
  Outer o = new Outer();
  o.ma();
  }
}
public class Outer {
  private int s = 111;
  public class Inner {
  private int s = 222;
  public void mb(int s) {
    System.out.println(s); // 局部变量s
    System.out.println(this.s); // 内部类对象的属性s
    System.out.println(Outer.this.s); // 外部类对象属性s
  }
}
public static void main(String args[]) {
  Outer a = new Outer();
  Outer.Inner b = a.new Inner();
  b.mb(333);
  }
}

局部内部类访问局部变量必须用final 修饰 ?

局部变量会随方法结束而消失,但对象可能还需要使用这个变量,堆内存不会因此而消失

匿名内部类

就是内部类的简化写法

前提:存在一个类或者接口

格式:new 类名或者接口名(){

重写方法;

}

本质:是一个继承了该类或者实现了该接口的子类匿名对象

举例

interface A{
  public abstract void fun1();
}
public class Outer{
  public static void main(String[] args) {
  new Outer().callInner(new A(){
//接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名
  public void fun1() {
  System.out.println(“implement for fun1");
    }
  });// 两步写成一步了
}
public void callInner(A a) {
  a.fun1();
  }
}

相关文章
|
6月前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
|
Java C++
类的成员之四:代码块
类的成员之四:代码块
57 0
|
6月前
|
C# 开发者 索引
C# 11.0中的静态抽象成员:接口中的新变革
【1月更文挑战第25天】C# 11.0引入了接口中的静态抽象成员,这一新特性为接口设计带来了更大的灵活性。静态抽象成员允许在接口中定义静态方法和属性,并要求实现类提供具体的实现。本文将详细探讨C# 11.0中静态抽象成员的工作原理、优势及其对现有编程模式的影响,旨在帮助读者更好地理解和应用这一新特性。
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
|
Java C++
类的内部成员之五:内部类
类的内部成员之五:内部类
56 1
类和对象-封装-成员属性私有化
类和对象-封装-成员属性私有化
50 0
|
存储 安全 编译器
【C++基础】类与对象(上):访问限定符、类作用域、类实例化、类对象模型、this指针
【C++基础】类与对象(上):访问限定符、类作用域、类实例化、类对象模型、this指针
114 0
18-类和对象-封装-成员属性私有化
18-类和对象-封装-成员属性私有化
|
Java 编译器 C++
类与对象(三):stactic成员、友元、内部类
在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。
49 0
|
Java 编译器 C++
【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元(下)
【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元(下)
180 0
【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元【C++】类和对象(下)—— 再谈构造函数 | static成员 | C++11补丁 |友元(下)