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——类的成员之五:内部类的更多相关文章

  1. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  2. Java类的成员初始化顺序

    Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...

  3. java类的成员初始化顺序和初始化块知识

    java类的成员初始化顺序和初始化块知识 转自:http://blog.csdn.net/lgfeng218/article/details/7606735 属性.方法.构造方法和自由块都是类中的成员 ...

  4. Java类及成员

    Java类及成员 类 类是对一类事物的的描述,是抽象的概念上的定义:类是创建对象的模板: public class TestClass { public static void main(String ...

  5. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

    hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

  6. 一道关于java 类初始化 成员初始化的笔试题的解析

    代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new ...

  7. java类中成员的初始化顺序(一)

    类被创建之后的成员的初始化顺序到底是怎么样的? 首先 不考虑继承 package com; public class DemoOne { /** * 关于类的初始化顺序 */ //不考虑继承结构的情况 ...

  8. Java类的成员之四:代码块.

    3.2类的成员之四:代码块 ①初始化块(代码块)作用:对Java对象进行初始化 ②程序的执行顺序: ③一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ) ...

  9. 【Java基础】Java类及成员和修饰符的关系

    修饰符的分类 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类的修饰符 权限修饰符:默认修饰符,public ...

随机推荐

  1. vue video全屏播放

    需求: 1.视频为长方形,页面初始化打开为横屏全屏播放视频. 2.微信不支持自动播放,故自动播放需求删除. 方法: 1.vue-video-player插件 因需求较简单,仅要求播放本地一个视频,故未 ...

  2. docker 数据持久化

    confluence #!/bin/bash docker run \ --name confluence \ --volume "$PWD/data/opt":/opt \ -- ...

  3. git代码提交步骤

    常用的步骤: 1)假如本地想关联git仓库,那么先git  init,git remote add origin [git地址] 2)假如是想直接从git仓库拉下来,那么git clone [git地 ...

  4. 埋在MySQL数据库应用中的17个关键问题

    出处:https://blog.csdn.net/weixin_42882439 MySQL的使用非常普遍,跟MySQL有关的话题也非常多,如性能优化.高可用性.强一致性.安全.备份.集群.横向扩展. ...

  5. 20175223 《Java程序设计》第十一周学习总结

    目录 教材学习内容总结 代码调试中的问题和解决过程 1. Linux中编程实现计算器方法乘法报错,但 IDEA 中可以. [代码托管] 学习进度条 参考资料 目录 教材学习内容总结 因未熟练掌握第十章 ...

  6. JAVA 的StringBuffer类

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  7. JS-JSDoc

    http://usejsdoc.org/ 生成 JSDoc 格式的注释: sublime:安装 DocBlockr VSCode:自带 JSDoc 插件

  8. excel数据生成sql insert语句

    excel数据生成sql insert语句 excel表格中有A.B.C三列数据,希望导入到数据库users表中,对应的字段分别是name,sex,age . 在你的excel表格中增加一列,利用ex ...

  9. Jmeter beanshell断言 org.json.jar包下载

    链接:https://pan.baidu.com/s/1O01ODjlKyqmz2NyDT0MCww 提取码:a5va 欢迎关注微信公众号:软件测试汪,qq技术交流群:809111560

  10. 2019牛客多校第六场J-Upgrading Technology(枚举+单调队列)

    Upgrading Technology 题目传送门 解题思路 对于这题,我们可以枚举一个k从0~m,表示当前我们把所有技能最少升到了k级,且至少有一个为k级. 此时我们刚好获得了前k个d[]的收益, ...