Java——类的成员之五:内部类
3.6 类的成员之五:内部类
3.6.1 静态内部类
①静态内部类可以等同看做静态变量。
②内部类重要的作用:可以访问外部类中私有的数据。
③静态内部类可以直接访问外部类的静态数据,无法直接访问成员。
④静态内部类不会持有外部的类的引用,创建时可以不用创建外部类,静态内部类可以直接访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问
public class OuterClass{ //静态变量 private static String s1 = "A"; //成员变量 private String s2 = "B"; //静态方法 private static void m1(){ System.out.println("static's m1 method execute!"); } //成员方法 private void m2(){ System.out.println("m2 method execute!"); } //静态内部类 //可以用访问控制权限的修饰符修饰。 //public,protected,private,缺省 static class InnerClass{ //静态方法 public static void m3(){ System.out.println(s1); m1(); //System.out.println(s2); //m2(); } //成员方法 public void m4(){ System.out.println(s1); m1(); //System.out.println(s2); //m2(); } } //入口 public static void main(String[] args){ //执行m3 OuterClass.InnerClass.m3(); //执行m4 InnerClass inner = new OuterClass.InnerClass(); inner.m4(); } } |
3.6.2 成员内部类
①成员内部类可以等同看做成员变量
②成员内部类中不能有静态声明
③成员内部类可以访问外部类所有的数据
public class OuterClass{ //静态变量 private static String s1 = "A"; //成员变量 private String s2 = "B"; //静态方法 private static void m1(){ System.out.println("static's m1 method execute!"); } //成员方法 private void m2(){ System.out.println("m2 method execute!"); } //成员内部类 //可以用访问控制权限的修饰符修饰。 //public,protected,private,缺省 class InnerClass{ //静态方法 //public static void m3(){} //成员方法 public void m4(){ System.out.println(s1); m1(); System.out.println(s2); m2(); } } //入口 public static void main(String[] args){ //创建外部类对象 OuterClass oc = new OuterClass(); InnerClass inner = oc.new InnerClass(); inner.m4(); } } |
3.6.3 局部内部类
①局部内部类等同于局部变量
②重点:局部内部类在访问局部变量的时候,局部变量必须使用final修饰
③局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样
局部内部类和成员内部类一致,不能包含静态成员
public class OuterClass{ //方法 public void m1(){ //局部变量 final int i = 10;// //局部内部类 //局部内部类不能用访问控制权限修饰符修饰。 class InnerClass{ //内部类不能有静态声明 //public static void m1(){} //成员方法 public void m2(){ System.out.println(i); // 10 } } //调用m2 InnerClass inner = new InnerClass(); inner.m2(); } //入口 public static void main(String[] args){ OuterClass oc = new OuterClass(); oc.m1(); } } |
3.6.4 匿名内部类
是一种特殊的内部类,该类没有名字
public class Test{ //静态方法 public static void t(CustomerService cs){ cs.logout(); } //入口 public static void main(String[] args){ //调用t方法 //t(new CustomerServiceImpl()); //使用匿名内部类的方式执行t方法 //整个这个"new CustomerService(){}"就是个匿名内部类 t(new CustomerService(){ public void logout(){ System.out.println("exit!"); } }); //匿名内部类的优点:少定义一个类. //缺点:无法重复使用! } } //接口 interface CustomerService{ //退出系统 void logout(); } //编写一个类实现CustomerService接口 /* class CustomerServiceImpl implements CustomerService{ public void logout(){ System.out.println("系统已经安全退出!"); } } */ |
Java——类的成员之五:内部类的更多相关文章
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...
- java类的成员初始化顺序和初始化块知识
java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...
- Java类及成员
Java类及成员 类 类是对一类事物的的描述,是抽象的概念上的定义:类是创建对象的模板: public class TestClass { public static void main(String ...
- hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化
hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...
- 一道关于java 类初始化 成员初始化的笔试题的解析
代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new ...
- java类中成员的初始化顺序(一)
类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 ...
- Java类的成员之四:代码块.
3.2类的成员之四:代码块 ①初始化块(代码块)作用:对Java对象进行初始化 ②程序的执行顺序: ③一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ) ...
- 【Java基础】Java类及成员和修饰符的关系
修饰符的分类 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类的修饰符 权限修饰符:默认修饰符,public ...
随机推荐
- MariaDB 创建表
在本章中,我们将学习如何创建表. 在创建表之前,首先确定其名称,字段名称和字段定义. 以下是表创建的一般语法: CREATE TABLE table_name (column_name column_ ...
- ZROI week4
考试 前言 起晚了,大概10点才开始看T1,被别人问了T2有点懵逼. 和 这题看了就A掉了,感觉很像原题的样子,是我的错觉吗?? 串串 某神仙有个\(O(n)\)做法问了我一下,我当时也没怎么想(因为 ...
- 分布式系统理论基础1: 一致性、2PC和3PC
本文转自 https://www.cnblogs.com/bangerlee/p/5268485.html 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到 ...
- mysql全家桶(四)存储过程
一.存储过程1.介绍简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以 ...
- mybatis PageBounds应用分页
第一步:分页工具类 package com.smartmorse.vo; import java.util.HashMap; import java.util.List; import java.ut ...
- Idea JAVA項目的导入JAR包和导出jar包
一.IDea项目中导入jar包 打开菜单project structure,然后选择modules/dependencies下选择右侧的+,选择jar包目录中的jar文件,导入 二.导出jar包 菜单 ...
- LightOJ 1030 Discovering Gold (概率/期望DP)
题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 ...
- HTML5网页如何让所有的浏览器都能识别语义元素标签样式
浏览器对语义元素的支持情况 如今HTML5愈来愈引发大家的关注了,但目前支持HTML5的浏览器还不是主流,特别是国内用户近50%以上仍旧使用IE6,由于支持HTML5的IE9不支持Xp系统安装,这样未 ...
- ng-repeat如何限制循环次数
如果items 里有20条数据,如果你要循环 items, 只想循环5条 你可以这么做: ng-repeat="item in items|limitTo:5"
- Window/Linux + Vim + MingW 配置
Windows: 首先安装Vim , MinGW,假设安装目录为D:\MinGW. 配置环境变量: LIBRARY_PATH=D:\MinGW\lib C_INCLUDE_PATH=D:\MinGW\ ...