Java 内部类的阐述
创建一个Computer抽象类:用来在Test类中创建匿名抽象类
package com.zhiyou;
public abstract class Computer {
int a = 1;
/**
* 不能够创建出抽象类的一个对象
*/
public abstract void online();
public abstract void watchTv();
}
创建一个外部类Outter,在这个外部类Outter的内部在创建一个内部类Inner,在不同的位置定义变量a,我们需要注意的是如何调用不同位置的变量a!
package com.zhiyou;
public class Outter {
public void a() {
int a = 3;
System.out.println("外部类a方法--" + this.a);
}
/**
* 嵌套的概念 除了变量和方法之外,我们还可以定义一个类 这个类就是内部类
*/
int a = 1;
class Inner {
int a = 2;
public void b() {
int a = 3;
// 不加任何描述的时候根据就近原则调用离他最近的变量
System.out.println("方法内部局部变量--" + a);
// this. 代表调用本类的成员变量或方法
System.out.println("内部类的成员变量--" + this.a);
// Outter.this. 代表调用外部类的成员变量或方法
System.out.println("外部类的成员变量--" + Outter.this.a);
// 调用方法的形式:方法名--()参数列表--分号
// a();
}
}
}
创建一个接口AAA用来创建接口的匿名内部类
package com.zhiyou;
public interface AAA {
}
创建测试类Test,用来输出
package com.zhiyou; /**
* 同一个包下面,普通类创建对象时可以直接调用 但是内部类就需要使用import引入
*/
// import com.zhiyou.Outter.Inner; public class Test { /**
* 内部类
*
*/
public static void main(String[] args) { // 生成的二进制字节码文件(.class文件)名称是Outter.class
// 那么它里面的内部类Inner生成的文件名称是Outter$Inner.class
Outter outter = new Outter();
// System.out.println(outter.a);
// outter.a(); /*
* 讲继承的时候说过:没有父类就没有子类 对于内部类也一样:没有外部类的对象就不能创建一个内部类的对象
*
* 创建内部类对象的方法:通过外部类的对象去创建内部类的对象
*/
// 写法1
Outter.Inner inner = outter.new Inner();
// 写法2
// 通过这种方式创建出来的外部类对象没有引用,是不能使用里面的变量和方法的
// 匿名:new Outter().new Inner();创建出来了一个外部类的对象,但是他没有引用,没用名字
Outter.Inner inner1 = new Outter().new Inner(); System.out.println(inner.a);
inner.b(); /**
* 不能够创建出抽象类的一个对象 匿名的概念
*
* 匿名内部类 这下面其实是有一个类的存在的,但是我们看不见类的任何影子 在编译后的目录中多出来一个 Test$1.class
*
* 相当于:创建出来了一个匿名内部类继承了抽象类Computer并实现了他的抽象方法 创建出了一个抽象类的子类的对象
*/
Computer computer = new Computer() {
public void watchTv() {
System.out.println("匿名内部类中的方法 看电视");
} public void online() {
System.out.println("匿名内部类中的方法 上网");
}
};
System.out.println("抽象类中的变量 a" + computer.a);
computer.watchTv();
computer.online(); /*
* 匿名内部类的创建形式
*
* 不是new+构造方法
*
* new--抽象类或者接口名--()--{}实现抽象方法的地方--分号
* 接口是没有构造方法的的,抽象类有
*/
AAA a = new AAA() {
};
} }
Java 内部类的阐述的更多相关文章
- 从字节码的角度看Java内部类与外部类的互相访问
Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...
- 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 ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- java内部类的作用分析
提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...
随机推荐
- Android实现播放视频
转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位 ...
- java使用Executor(执行器)管理线程
一.一个实现了Runnable接口的类 class MyThread implements Runnable{ private static int num = 0; @Override public ...
- zyUpload+struct2完成文件上传
前言: 最近在写自己的博客网站,算是强化一下自己对s2sh框架的理解.期间遇到了很多问题,这些问题在写之前都考虑过,感觉也就是那样吧.但正真遇到了,也挺让人难受的.就利用zyUpload这个js插件实 ...
- 【开源】OSharp框架解说系列(2.2):EasyUI复杂布局及数据操作
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- Objective-C中的继承和多态
面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...
- 如何利用Python生成随机密码
写了个程序,主要是用来检测MySQL数据库的空密码和弱密码的, 在这里,定义了三类弱密码: 1. 连续数字,譬如123456,在get_weak_num中实现 2. 连续字母,譬如abcdef,在ge ...
- 如何在Windows Server 2008 上添加RD (远程桌面)会话主机配置的远程桌面授权服务器
在Windows Server系列的现存活跃产品中都默认的会开放两个随机附送的远程控制的授权,而一些特殊条件下我们需要启用多个远程终端连接,在购买了相应的授权之后,我们如何将配置好的服务器添加到远程桌 ...
- 1Z0-053 争议题目解析498
1Z0-053 争议题目解析498 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 498.The database Is configured in ARCHIVELOG mode ...
- 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...
- 将DataTable转换成CSV文件
DataTable用于在.net项目中,用于缓存数据,DataTable表示内存中数据的一个表.CSV文件最早用在简单的数据库里,由于其格式简单,并具备很强的开放性,所以起初被扫图家用作自己图集的标记 ...