解读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 ...
随机推荐
- java8 stream ,filter 等功能代替for循环
直接上代码,比较实在. 对象A public Class A{ private Long id; private String userName; ..... ....省略get和set方法 } 在L ...
- Unity中使用多构造函数
如果要实例化的类只有一个构造函数, 则使用方法很简单使用方法如下: 1 2 3 4 5 6 7 using (IUnityContainer container = new UnityContaine ...
- Linux 线程调度与优先级设置
转载:http://blog.csdn.net/a_ran/article/details/43759729 线程调度间的上下文切换 什么是上下文切换? 如果主线程是唯一的线程,那么他基本上不会被调度 ...
- PHP常用函数(收集)
<?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...
- Aaron Swartz – 互联网天才开挂的人生历程:每时每刻都问自己,现在这世界有什么最重要的事是我能参与去做的?
Aaron说的一句话让我挺有感触的-- 相信你应该真的每时每刻都问自己,现在这世界有什么最重要的事是我能参与去做的? 如果你没在做那最重要的事,那又是为什么? 1986年11月8日,有个叫Aaron ...
- html <select> 用JS控制默认选中项
<html> <head> <!--禁止页面缓存--><meta http-equiv="content-type" content=&q ...
- 字符集 ISO-8859-1(3)
详细见 http://www.w3school.com.cn/tags/html_ref_urlencode.html
- Backbone源码解读(一)事件模块
Backbone源码浅读: 前言: Backbone是早起的js前端MV*框架之一,是一个依赖于underscore和jquery的轻量级框架,虽然underscore中基于字符串拼接的模板引擎相比如 ...
- sitemap.xml 的 几个东西
https://github.com/PureKrome/SimpleSitemap/wiki/Sitemap-Index-example 简单类实现 支持sitemapindex 有说明向导 ht ...
- 程序启动缓慢-原来是hbm.xml doctype的原因
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h ...