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),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...
随机推荐
- 使用karma测试平时写的小demo(arguments为例)
有人说前端自动化测试非常困难,我觉得确实如此.在项目中,我个人也不放心写的测试,还是要手动测试.但是我们平时写demo学习时,完全可以使用自动化测试. 传统demo 1,新建一个html 2,写入js ...
- 如何使用Xmanager及VNC登录远程桌面
如何调用远程桌面,比较常见的有两种方式:Xmanager及VNC 正好今天鼓捣了一下,特整理如下: Xmanager Xmanager的调用也有两种方式: 一.直接在Xshell中调用 这时需设置会话 ...
- 如何利用Oracle外部表导入文本文件的数据
同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在 ...
- java多线程--定时器Timer的使用
定时的功能我们在手机上见得比较多,比如定时清理垃圾,闹钟,等等.定时功能在java中主要使用的就是Timer对象,他在内部使用的就是多线程的技术. Time类主要负责完成定时计划任务的功能,就是在指定 ...
- iOS_UIImage_毛玻璃效果
效果图: 核心方法: // 出入UIImage 和 blur模糊成度 (0-1) - (UIImage *)blurryImage:(UIImage *)image withBlurLevel:(CG ...
- 一台电脑上的git同时使用两个github账户
需求: 公司有github账号,自己有github账号,想在git上同时使用,两者互不干扰. 思路: 管理两个SHH key. 解决方案: 一.生成两个SSH key 为了举例方便,这里使用“one” ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- 将Resource中的图片资源动态绑定到PictureBox中:
//CurrentCommunication为解决方案的名字,dynamic为图片的名字 pictureBox1.Image = CurrentCommunication.Properties.Res ...
- PHP之时间处理
面试的时候有一道题是这样的:封装一个函数实现,给你一个时间,输出这个时间的对应的这一天是星期几,其实无非就是一些时间格式的处理: date_default_timezone_set('PRC'); / ...
- Visual Studio 2013中因SignalR的Browser Link引起的Javascript错误一则
众所周知Visual Studio 2013中有一个由SignalR机制实现的Browser Link功能,意思是开发人员可以同时使用多个浏览器进行调试,当按下IDE中的Browser Link按钮后 ...