解读Java内部类
一、基本概念:
顾名思义,内部类存在于外部类当中,依附于外部类。就像眼睛和脑袋的关系一样。
二、几点说明:
三、分类:
1.成员内部类:
a).成员内部类可以看成是外部类的成员变量。
b).非静态内部类
public class Out {
int age;
String name;
private char sex;
class In {
int age;
public void print() {
//内部类可以访问任何权限的外部类成员
System.out.println("姓名为:" + name + "\n" + "性别为:" + sex);
}
}
}
class Demo {
public static void main(String[] args) {
//非静态内部类对象的创建必须基于外部类对象(静态成员属于类,非静态成员属于对象)
Out.In in = new Out().new In();
in.print();
}
}
c).静态内部类
public class Out {
int age;
String name;
private char sex;
static int height;
static class In {
int age;
public void print() {
//静态内部类只能访问外部类的静态变量
System.out.println("身高为:" + height);
}
}
}
class Demo {
public static void main(String[] args) {
//静态内部类对象的创建可直接基于外部类(静态成员属于类,非静态成员属于对象)
Out.In in = new Out.In();
in.print();
}
}
d).私有内部类
public class Out {
int age;
String name;
private char sex;
static int height;
private class In {
int age;
public void print() {
System.out.println("身高为:" + height);
}
}
}
class Demo {
public static void main(String[] args) {
//私有内部类只能在外部类内部使用,以下代码无效
/*Out.In in = new Out.In();
in.print();*/
}
}
2.匿名内部类:
a).内部类只使用一次时候,则定义为匿名内部类,节省定义新类的成本
b).匿名内部类在抽象类的实现
public abstract class Animal {
public abstract void eat();
}
class Demo {
public static void main(String[] args) {
Animal dog = new Animal() {
@Override
public void eat() {
System.out.println("狗吃骨头!!");
}
};
dog.eat();
}
}
匿名内部类不允许定义构造函数.
c).匿名内部类在接口的实现
public interface Animal {
public abstract void eat();
}
class Demo {
public static void main(String[] args) {
Animal cat = new Animal() {
@Override
public void eat() {
System.out.println("猫吃鱼!!");
}
};
cat.eat();
}
}
3.局部内部类:
a).局部内部类存在于方法体中,不常用
b).基本实现
public class Out {
//方法传参数给局部内部类时参数定义为fianl
public void outPrint(final String str) {
class In {
public void inPrint() {
System.out.println(str);
}
}
new In().inPrint();
}
}
class Demo {
public static void main(String[] args) {
new Out().outPrint("测试字符串!!");
}
}
解读Java内部类的更多相关文章
- 【转载】深度解读 java 线程池设计思想及源码实现
总览 开篇来一些废话.下图是 java 线程池几个相关类的继承结构: 先简单说说这个继承结构,Executor 位于最顶层,也是最简单的,就一个 execute(Runnable runnable) ...
- Java并发指南12:深度解读 java 线程池设计思想及源码实现
深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...
- Java并发指南11:解读 Java 阻塞队列 BlockingQueue
解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA内部类
黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...
- java 内部类 *** 最爱那水货
注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...
- java内部类和匿名内部类
内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...
- Java内部类小程序(成员内部类,静态内部类,匿名内部类)
/** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...
随机推荐
- leetcode--001 max point on a line
package leetcode; import java.util.HashMap; class Point{ int x; int y; Point(){ x=0; y=0; } Point(in ...
- ios framework 开发实战 之 参考
WWDC2014之iOS使用动态库 iOS开发——创建你自己的Framework 使用CocoaPods开发并打包静态库 iOS Framework 和CocoaPods TDD的iOS开发初步以及K ...
- archlinux初次接触遇到的问题
arch-chroot /mnt /bin/bash ( 两个地址中间有空格)
- Core Data使用之一(Swift): 保存
Core Data 用于永久化数据,它是基于SQLite数据库的保存一门技术. 那么,在Swift中,它是如何实现的呢? 首先,需要新建一个模板,打开工程中的xcdatamodeld文件,点击“Add ...
- 外显率&显性上位
外显率(penetrance): 外显率是指条件下,群体中某一基因型(通常在杂合子状态下)个体表现出相应表型的百分率.外显率等于100%时称为完全外显(complete penetranc)低于100 ...
- JIRA描述默认值设置
JIRA描述默认值设置 Setting a Default Value in the Description Field 转自https://confluence.atlassian.com/jira ...
- redhat6 + 11G DG部署
在主库中netca配置 [oracle@HE3dbs]$ cat /u01/app/oracle/product/11gr2/db_1/network/admin/listener.ora #list ...
- jdbc数据连接池dbcp要导入的jar包
jdbc数据连接池dbcp要导入的jar包 只用导入commons-dbcp-x.y.z.jarcommons-pool-a.b.jar
- 让Flash支持Stage3D
如要需要支持Stage3D,采用GPU来渲染,需要设置wmode="direct",在FB中,对于web和air设置方法不同: 1.web: 需要在web的html模板中,添加参数 ...
- easyUI parser的使用
easyUI parser的使用: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...