一、内部类

1.1.1、成员内部类

一个类定义在另一个类的内部,那么该类就叫作成员内部类

1.1.2、成员内部类访问方式

方式一:在外部类中提供一个方法创建内部类的对象进行访问
       方式二:在其他类中创建内部类的对象:   格式:外部类.内部类 变量名=new 外部类().new 内部类();

注意:如果是一个静态的内部类,那么其他内的创建的格式
                  外部类.内部类 变量名 = new 外部类.内部类();

方式一:

 /* 方式一 */

 //外部类
class Outer{
    int 1 = 100;
//成员外部类
class Inner{
      int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+i);
}
}
//在外部的方法中创建内部类的对象,然后调用内部方法
public void instance(){
Inner inner=new Inner();
inner.print();
}
}
class Demo3 {
public static void main(String[] args) {
Outer o=new Outer();
o.instance();
}
}

方式二:

 /* 方式二 */

 //外部类
class Outer{
    int i = 100;
//成员外部类
class Inner{
      int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+i);
}
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
inner.print();
}
}

注意:静态内部类的调用方法

 //外部类
class Outer{
int i = 100;
//成员内部类
static class Inner{
static int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+t);
}
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner=new Outer.Inner();//静态的内部类
inner.print();
}
}

1.1.3、内部类应用的场景

我们描述A事物的时候,发现描述A事物还存在另外一个比较复杂事物B的时候,而且这个比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候我们就可以使用内部类描述B事物

比如:   人-------->心脏  等等。

class 人{ //外部类
血液
氧气
等....
class 心脏{ //内部类
  .... }
}

1.1.4、内部类的好处

  内部类可以直接访问外部类的所有成员

1.1.5、内部内需要注意的细节:
  1.如果内部类和外部类存在同名的成员时,在内部类中默认访问的是内部类的成员变量,可以通过"外部类.this.成员变量名"指定访问外部类的成员
  2.私有的成员内部类只能在外部类中类中提供一个方法创建内部类对象进行访问,不能在其他类中创建对象了.
  3.成员内部类一旦出现静态成员,那么该类必须用static修饰

//外部类
class Outer{
int i=100;//outer.class文件被加载到内存时存在内中.静态的成员数据是不需要对象存在才能访问的
public int test(){
System.out.println("hello,你好");
return 1;
}
//成员内部类
class Inner{
  int t=i;
  public void print(){
System.out.println("这是内部类的的print方法!..."+t);
}
int c=test();
}
//在外部的方法中创建内部类的对象,然后调用内部方法
public void instance(){
Inner inner=new Inner();
inner.print();
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner=new Outer().new Inner();
//Outer.Inner inner=new Outer.Inner();//静态的内部类
inner.print();
//System.out.println(Outer.Inner.i);
Outer o=new Outer();
o.instance();
}
}

1.2.1、局部内部类

在一个类的方法内定义另一个类,那么另一个类就称作为局部内部类.

1.2.2、局部内部类需要注意的细节

1.如果局部内部类访问一个局部变量,那么该局部变量必须使用final修饰

 1 //外部类
2 class Outer{
private String name="外部类的name";
public void eat(){ //外部类的方法
final int i=10;
//局部内部类
class Inner{
//int i;
public void print(){
System.out.println("这是局部内部类的方法......"+i);
}
}
//实例化局部内部类
Inner inner=new Inner();
inner.print();
}
}
class Demo4 {
public static void main(String[] args) {
Outer o=new Outer();
o.eat();
}
}

二、匿名内部类

2.1、匿名内部类

没有名字的类名称作为匿名内部类

2.2、匿名内部类的好处

简化书写

2.3、匿名内部类的使用前提

必须存在继承或者实现关系才能使用

继承关系下的匿名内部类

 //继承关系下的匿名内部类
abstract class Animal{
public abstract Animal run();
public abstract void sleep();
} class Outher{
public void print(){
//匿名内部类:只是没有类名,其他的一概成员都具备的
//匿名内部类与Animal是继承关系,目前是Animal子类的对象
Animal a = new Animal(){ //多态 new Animal():是一个子类对象
//匿名内部的成员
public Animal run(){
System.out.println("狗在跑.....");
return this;
}
public void sleep(){
System.out.println("狗趴着睁着眼睛睡......");
}
};
a.run();
a.sleep(); }
}
class Demo6 {
public static void main(String[] args) {
Outher o=new Outher();
o.print();
}
}

或者

 //继承关系下的匿名内部类
abstract class Animal{
public abstract Animal run();
public abstract void sleep();
} class Outher{
public void print(){
//匿名内部类:只是没有类名,其他的一概成员都具备的
//匿名内部类与Animal是继承关系,目前是Animal子类的对象
new Animal(){ //多态 new Animal():是一个子类对象
//匿名内部的成员
public Animal run(){
System.out.println("狗在跑.....");
return this;
}
public void sleep(){
System.out.println("狗趴着睁着眼睛睡......");
}
}.run().sleep();
}
}
class Demo6 {
public static void main(String[] args) {
Outher o=new Outher();
o.print();
}
}

实现关系下的匿名内部类

 //实现关系下的匿名内部类
interface Dao{ //接口
public void add();
}
//接口的实现
class t implements Dao{
public void add(){ }
}
//外部类
class Outer{
public void print(){ //外部类的方法
//创建一个匿名的内部类的对象
new Dao(){//不是说好的接口不能实例话吗?现在咋又实例化了啊! 其实:(匿名内部类实现了Dao),实现关系
public void add(){
System.out.println("添加成功");
}
}.add();
}
} class Demo7{
public static void main(String[] args) {
Outer o = new Outer();
o.print();
}
}

或者

//实现关系下的匿名内部类
interface Dao{
public void add();
} class t implements Dao{
public void add(){ }
}
/*
class Outer{
public void print(){
//创建一个匿名的内部类的对象
new Dao(){//不是说好的接口不能实例话吗?现在咋又实例化了啊! (匿名内部类实现了Dao)实现关系
public void add(){
System.out.println("添加成功");
}
}.add();
}
}
*/
class Demo7{
public static void main(String[] args) {
test(new Dao(){//Dao的一个匿名实现类
public void add(){
System.out.println("添加成功");
}
});
}
//调用这个方法
public static void test(Dao d){//形参类型是一个接口引用.....(多态)
d.add();
}
}

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:http://www.cnblogs.com/dshore123/p/8920503.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 
 
 
G
M
T
 
检测语言
世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
  世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
         
 
 
 
文本转语音功能仅限200个字符
 
  选项 : 历史 : 反馈 : Donate 关闭

java基础15 内部类(成员内部类、局部内部类)和匿名内部类的更多相关文章

  1. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  2. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  3. java基础之修饰符和内部类

    1.java修饰符 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰 ...

  4. Java基础8:深入理解内部类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第一百章:局部内部类可以实现接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第九十八章:局部内部类访问作用域成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类

    笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...

  9. java基础之:详解内部类(转载)

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

随机推荐

  1. [BZOJ3195][Jxoi2012]奇怪的道路

    3195: [Jxoi2012]奇怪的道路 Time Limit: 10 Sec  Memory Limit: 128 MB Description 小宇从历史书上了解到一个古老的文明.这个文明在各个 ...

  2. 【刷题】BZOJ 2780 [Spoj]8093 Sevenk Love Oimaster

    Description Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXu ...

  3. BeanUtils介绍及其使用

    BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中.在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一 ...

  4. 洛谷p1017 进制转换(2000noip提高组)

    洛谷P1017 进制转换 题意分析 给出一个数n,要求用负R进制显示. n∈[-32768,32767].R ∈[-20,-2] 考察的是负进制数的转换,需要理解短除法. 看到这道题的时候,我是比较蒙 ...

  5. 《JavaScript高级程序设计(第三版)》-2

    变量 ECMAScript变量是松散类型的,即可以保存任何类型的数据. 初始化变量不会把它标记类型,初始化的过程只是给变量付一个值,因此可以在修改变量的同时修改值的类型.但并不推荐这样做. var m ...

  6. Educational Codeforces Round 24 A 水 B stl C 暴力 D stl模拟 E 二分

    A. Diplomas and Certificates time limit per test 1 second memory limit per test 256 megabytes input ...

  7. 通过ida dump Uinity3D的加密dll

    声明: 1.本文转载自:http://www.52pojie.cn/thread-398266-1-1.html,仅供自己保存使用,高手勿喷 2.欢迎学习交流 通过ida dump Uinity3D的 ...

  8. ACE服务端编程5:ACE日志输出和跟踪

    服务器程序经常需要在命令行中显示错误消息.状态或者用来跟踪程序的执行路径,最简单的方法是使用printf. ACE提供了更强大日志设施: 1.可以在编译时启用或禁用宏: 2.可以动态的启用或禁用宏: ...

  9. JS笔记加强版3

    JS 面向对象及组件开发   JS的面向对象:   1.什么是面向对象编程   用对象的思想去写代码,就是面向对象编程 过程式写法 面向对象写法 我们一直都在使用对象 数组 Array 时间 Date ...

  10. Xamarin Error:Could not find android.jar for API Level 23.

    背景:打开别人Xamarin项目找不到android.jar文件 报错: 解决方案1:工具——Android——Amdroid SDK 管理器…出现以下窗口(根据需要的[API级别])勾选相应的Pla ...