首页 > 编程语言 >JAVA 内部类

JAVA 内部类

时间:2023-07-19 17:24:04浏览次数:36  
标签:JAVA 内部 静态 private public int class

Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类。根据定义 的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种。   静态内部类 定义在类内部的静态类,就是静态内部类。

1 public class Out {
2     private static int a;
3     private int b;
4     public static class Inner {
5         public void print() {
6             System.out.println(a);
7         }
8     }
9 }
1. 静态内部类可以访问外部类所有的静态变量和方法,即使是 private 的也一样。 2. 静态内部类和一般类一致,可以定义静态变量、方法,构造方法等。 3. 其它类使用静态内部类需要使用“外部类.静态内部类”方式,如下所示:Out.Inner inner = new Out.Inner();inner.print(); 4. Java集合类HashMap内部就有一个静态内部类Entry。Entry是HashMap存放元素的抽象, HashMap 内部维护 Entry 数组用了存放元素,但是 Entry 对使用者是透明的。像这种和外部类关 系密切的,且不依赖外部类实例的,都可以使用静态内部类。   成员内部类 定义在类内部的非静态类,就是成员内部类。成员内部类不能定义静态方法和变量(final 修饰的除 外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义 静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。
 1 public class Out {
 2     private static int a;
 3     private int b;
 4     public class Inner {
 5         public void print() {
 6             System.out.println(a);
 7             System.out.println(b);
 8         }
 9     }
10 }

 

局部内部类(定义在方法中的类) 定义在方法中的类,就是局部类。如果一个类只在某个方法中使用,则可以考虑使用局部类。
 1 public class Out {
 2     private static int a;
 3     private int b;
 4     public void test(final int c) {
 5         final int d = 1;
 6         class Inner {
 7             public void print() {
 8                 System.out.println(c);
 9             }
10         }
11     }
12 }

 

匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) 匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接 口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。
 1 public abstract class Bird {
 2     private String name;
 3     public String getName() {
 4         return name;
 5     }
 6     public void setName(String name) {
 7         this.name = name;
 8     }
 9     public abstract int fly();
10 }
11 
12 public class Test {
13     public void test(Bird bird){
14         System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
15     }
16     public static void main(String[] args) {
17         Test test = new Test();
18         test.test(new Bird() {
19             public int fly() {
20                 return 10000;
21             }
22             public String getName() {
23                 return "大雁";
24             }
25         });
26     }
27 }

 

标签:JAVA,内部,静态,private,public,int,class
From: https://www.cnblogs.com/zhncnblogs/p/17566209.html

相关文章

  • Java 默认构造
    Java默认构造方法的实现作为一名经验丰富的开发者,你将帮助一位刚入行的小白了解如何实现Java中的默认构造方法。在本篇文章中,我们将按照以下步骤来进行讲解:创建一个Java类添加默认构造方法编写构造方法的代码逻辑让我们一步一步地来实现这些步骤。1.创建一个Java类首先,......
  • Java 两个字符串相加
    Java两个字符串相加作为一名经验丰富的开发者,我很乐意教你如何实现“Java两个字符串相加”。下面我将详细介绍这个过程,并提供每个步骤所需的代码和注释。过程概述下面是实现“Java两个字符串相加”的步骤概览:步骤描述1创建两个字符串变量2输入两个待相加的字......
  • Java 静态初始化创建
    Java静态初始化创建简介静态初始化是一种在声明变量时直接初始化的方式,它可以在不创建对象的情况下对变量进行初始化。本文将介绍如何使用Java静态初始化创建变量的步骤和相应的代码示例。步骤下面是创建Java静态初始化变量的步骤。步骤描述1声明一个静态变量。2......
  • 用Ant实现Java项目的自动构建和部署
    是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。一.             安装与配置下载地址:http://ant.apache.org/,在本文中下载的是1.7.0版本。解压到某个目录(例如......
  • Java 获取上月年月
    Java获取上月年月在Java中,如何获取上个月的年份和月份呢?本文将通过示例代码详细介绍几种方法。方法一:使用Calendar类Java中的Calendar类提供了获取日期和时间的各种方法,包括获取当前日期、增加或减少日期、获取特定日期等。我们可以使用Calendar类来获取上个月的年份和月份。i......
  • Java包机制
    包机制-为了更好地组织类,Java提供了包机制,用于区别类名的命名空间-包语句的语法格式为packagepkg1[.pkg2[.pkg3...]]-一般利用公司域名倒置作为包名www.baidu.comcom.baidu.www-为了能够使用某个包的成员,我们需要在Java程序中明确导入该包,使用"import"语句即可-......
  • Java学习day05~06: 面向对象
    我在B站上大学......
  • Java运算符
    Java运算符-Java语言支持如下运算符:优先级()1算术运算符:+,-,*,/,%,++,--,2赋值运算符:=3关系运算符:>,<,>=,<=,==,!=instanceof4逻辑运算符:&&,||,!5位运算符:&,|,^,~,>>,<<,>>>(了解)6条件运算符:?:7扩展赋值运算符:+=,-=,*=,/=pa......
  • JavaScript实现,判断一个点是否在多边形内
    //定义点的结构体functionpoint(){this.x=0;this.y=0;}//计算一个点是否在多边形里,参数:点,多边形数组functionPointInPoly(pt,poly){for(varc=false,i=-1,l=poly.length,j=l-1;++i<l;j=i)((poly[i].y<=pt.y&&pt.y<p......
  • java - 支持word上传的富文本编辑器
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......