创建一个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 内部类的阐述的更多相关文章

  1. 从字节码的角度看Java内部类与外部类的互相访问

    Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...

  2. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  3. Java内部类详解

    Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...

  4. 黑马----JAVA内部类

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ...

  5. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  6. java内部类和匿名内部类

    内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...

  7. Java内部类小程序(成员内部类,静态内部类,匿名内部类)

    /** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...

  8. [转] Java内部类详解

    作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  9. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

随机推荐

  1. java面试知识(来自牛客网)

    接口和抽象类的区别是什么? 接口和抽象类的区别是什么? Java提供和支持创建抽象类和接口.它们的实现有共同点,不同点在于:接口中所有的方法隐含的都是抽象的.而抽象类则可以同时包含抽象和非抽象的方法. ...

  2. 配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)

    前面章节我们看到 instance 在启动过程中能够从 Neutron 的 DHCP 服务获得 IP,本节将详细讨论其内部实现机制. Neutron 提供 DHCP 服务的组件是 DHCP agent ...

  3. 使用wireshark抓包分析浏览器无法建立WebSocket连接的问题(server为Alchemy WebSockets组件)

    工作时使用了Websocket技术,在使用的过程中发现,浏览器(Chrome)升级后可能会导致Websocket不可用,更换浏览器后可以正常使用. 近日偶尔一次在本地调试,发现使用相同版本的Chrom ...

  4. 如何从源码中学习javascript

    艾伦说啊,学习javascript,必须要学会看源码,通过高手的源码,你可以从中吸取很多书本上难以看到的技巧. 看源码就好像喝鸡汤,所有的营养都在这汤里了.这汤就是源码,高手写的源码,就是最好的鸡汤. ...

  5. 【记录】AutoMapper Project To not support ResolveUsing

    示例代码: public List<OrderLineDTO> GetLinesForOrder(int orderId) { Mapper.CreateMap<OrderLine, ...

  6. 小菜学习Winform(六)剪切板和拖放复制

    前言 在做winform项目的时候有时候会用到复制粘贴,在.net中提供了Clipboard类来操作剪切板,我们来看下. clipbrd.exe clipbrd是系统剪切板程序,但是在vista及以上 ...

  7. [Math] Backpropagation

    没啥自己的内容,推荐若干链接,这些是真爱,你值得拥有. Principles of training multi-layer neural network using backpropagation ...

  8. 关于java连接mysql数据库的几个问题的解决方法。

    今天就为了连接下数据库获取信息来提供给ListView使用,搞了足足5小时. 出现的问题有: 第一个是,DriverManager.getConnection(url, user, pwd),这个函数 ...

  9. SpringBoot整合MyBatis

    转载请在文章最上方加上此句话:原文地址:http://www.cnblogs.com/zhuxiaojie/p/5836159.html 前言:这段时间用springboot感觉确实挺好用的,很大程度 ...

  10. 【原创】轻量级移动端即时通讯技术 MobileIMSDK 发布了

    申明:MobileIMSDK目前为个人原创开源工程,投入了大量的时间和精力,希望对需要的人有所帮助.如需与作者交流,见文章底部个人签名处,互相学习.Q群:215891622,欢迎共同志趣者学习和交流. ...