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),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...
随机推荐
- lintcode 落单的数(位操作)
题目1 落单的数 给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字. 链接:http://www.lintcode.com/zh-cn/problem/single ...
- RHEL 6.3 详细安装教程
以前刚接触linux时,什么都不懂,为了学习,在电脑上安装双系统(原系统为Win7),吃过不少苦头,在网上搜教程,很多都是语焉不详,导致安装过程中战战兢兢.最近朋友面试运维,面试官有考他对linux安 ...
- Lua 学习笔记(十一)元表与元方法
在Lua中的每个值都有一套预定义的操作集合.例如可以将数字相加,可以连接字符串,还可以在table中插入一对key-value等.但是我们无法将两个table相加,无法对函数作比较,也无法调用一个字符 ...
- 1Z0-053 争议题目解析505
1Z0-053 争议题目解析505 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 505.You configured the default backup device type ...
- 实用的SQL语句
行列互转 ) select * from test2 --列转行 select id,name,quarter,profile from test2 unpivot ( profile for qua ...
- (1)从底层设计,探讨插件式GIS框架的实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 研一时,听当时的师兄推荐,买了蒋波涛的一本关于GIS插件框架的书.当时 ...
- JS实现动态显示当前时间
效果图: 代码实现: <script language="JavaScript"> var timerID = null; var timerRunning = fal ...
- mybatis入门基础(九)----逆向工程
一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...
- 常用查找数据结构及算法(Python实现)
目录 一.基本概念 二.无序表查找 三.有序表查找 3.1 二分查找(Binary Search) 3.2 插值查找 3.3 斐波那契查找 四.线性索引查找 4.1 稠密索引 4.2 分块索引 4.3 ...
- [Asp.net 5] Configuration-新一代的配置文件
微软新一代asp.net(vnext),也叫asp.net 5,开源代码都放在网址https://github.com/aspnet下. 本文介绍的是Configuration工程,下载路径为http ...