java内部类:成员内部类,静态内部类方法内部类,匿名内部类(A)
package cn.kecheng; /**
* 在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致。这两个类是平行关系。
* 在java中,一个类也可以定义在一个类的内部,定义在内部的类称为内部类(Internalclass),
* 定义在外部的类称为外部类(InternalClass class). 内部类根据具体的修饰符和具体位置分为很多情况:
* 1成员内部类:一个内部类作为一个外部类的成员而存在,此时该内部类称为外部类的成员内部类。(也就是说内部类像方法和属性一样作为外部类的成员)
* 2静态内部类:如果一个内部类被static修饰,我们成为这个内部类为静态内部类。
*/
public class InternalClass {
private String name = "张三"; class Internal { // 【修饰符】(可省略)class 类名{},编译后结果为:InternalClass$Internal.class(看到这种文件名就可以确定为内部类($))
//静态内部类:static class Internal{} 静态内部类可以访问外部类的(私有)静态成员 // 特殊情况:外部类和内部类的变量同名,特殊情况:避免发生
private String name = "李四"; public void showInfo() {
System.out.println(name);// 输出结果:张三。 所以内部类中可以访问外部类的私有变量 System.out.println(this.name);// 访问内部类的私有成员
System.out.println(InternalClass.this.name);// 访问外部类的私有成员(在前面加个类名)
}
}
}
package cn.kecheng; import cn.kecheng.InternalClass.Internal;
//想创建外部类的对象,必须用import导入内部类
public class Test01 {
public static void main(String[] args) {
//内部类如何创建对象:
InternalClass internalClass=new InternalClass();//1.创建一个外部对象:
Internal internal=internalClass.new Internal();//2.(还要导入类)创建一个内部类必须在外部类的基础上创立
internal.showInfo(); //静态内部类创建对象:
//Internal internal1=new InternalClass.Internal(); //把外部类名放在内部类名前面
//internal1.showInfo(); }
}
package cn.kecheng; /**
* 3.方法内部类:如果一个内部类定义到一个方法中,成为方法内部类。
*/
public class InternalClass { public void showInfo() {
final int a=10;
class Internal {
public void print() {
System.out.println("show info"); //a=20;//方法的局部变量进入方法内部类时,必须加final修饰。
System.out.println(a);
}
} //在InternalClass类的方法內部,在InternalClass类的方法内提取
Internal internal = new Internal();
internal.print();
// 匿名对象(对象只用一次的情况,可以使用匿名对象)
//new Internal().showInfo()
} }
package cn.kecheng; /**
* 4.匿名内部类(A)
未来一个类如果只使用一次,我们可以把类声明为匿名类。匿名类一般和内部类结合使用,形成匿名内部类。
*/
public class InternalClass { public void showInfo() { //创建一个接口Inter,里面有show方法 Internal类实现接口:
// class Internal implements Inter{}
//把 Inter inter=new Internal(); inter.show(); 可以写成匿名对象:new Internal().show();
//Internal()代表:class Internal implements Inter{}
//把内部类看成一个对象:所以下面是匿名内部类,new Inter(){}[代表Internal()].show(); new Inter() {
public void show(){
System.out.println();
}
}.show(); } }
java内部类:成员内部类,静态内部类方法内部类,匿名内部类(A)的更多相关文章
- Java 内部类、静态内部类、匿名内部类
java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...
- 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类
不多说,直接上干货! 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 内部类 ...
- Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)
一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ...
- java内部类和静态内部类
看代码理解内部类,局部内部类和静态内部类 内部类代码: public class InnerTest { private static String name; private int age; pu ...
- 【Java入门提高篇】Day6 Java内部类——成员内部类
内部类是什么,简单来说,就是定义在类内部的类(一本正经的说着废话). 一个正经的内部类是长这样的: public class Outer { class Inner{ } } 这是为了演示而写的类,没 ...
- Java内部类——成员内部类
成员内部类的意思就是,一个外层类里面包含着一个非static的class,举例如下: class OuterClass { //变量,函数定义... class InnerClass { //变量,函 ...
- java内部类和静态内部类的区别
1 相同点 使用的时候,import的时候,除了包名,还要带外部类. 2 不同点 2.1 对象创建的方式不同 静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使 ...
- java内部类与静态内部类对比
内部类 静态内部类 有一个隐式引用,指向实例化这个对象的外部类对象 没有这个附加指针 不支持静态字段(language15) 支持哦 不支持静态方法 (language15) 支持哦 接口中的内部类自 ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &quo ...
随机推荐
- Django-4 视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...
- c提高第四课
1.一维数组的初始化 , , }; //3个元素 ] = { , , }; //a[3], a[4]自动初始化为0 ] = { }; //全部元素初始化为0 memset(c, , sizeof(c) ...
- Alan Turing的纪录片观后感
清明假期,火车上闲着,上B站看了图灵的纪录片 好吧,感想就两个词,数字化 和 自动化
- 使用excel整理脚本
的时候需要通过excel数据初始化脚本,当数据过多的时候,脚本也就很多.这里记录一个平时用excel初始化脚本的小技巧. excel中在空单元格中写如下值: ="INSERT INTO db ...
- CF1153 F. Serval and Bonus Problem(dp)
题意 一个长为 \(l\) 的线段,每次等概率选择线段上两个点,共选出 \(n\) 条线段,求至少被 \(k\) 条线段覆盖的长度期望. 数据范围 \(1 \le k \le n \le 2000, ...
- 「BZOJ2733」「洛谷3224」「HNOI2012」永无乡【线段树合并】
题目链接 [洛谷] 题解 很明显是要用线段树合并的. 对于当前的每一个连通块都建立一个权值线段树. 权值线段树处理操作中的\(k\)大的问题. 如果需要合并,那么就线段树暴力合并,时间复杂度是\(nl ...
- PAT 甲级真题题解(1-62)
准备每天刷两题PAT真题.(一句话题解) 1001 A+B Format 模拟输出,注意格式 #include <cstdio> #include <cstring> #in ...
- [十二省联考2019]异或粽子(堆+可持久化Trie)
前置芝士:可持久化Trie & 堆 类似于超级钢琴,我们用堆维护一个四元组\((st, l, r, pos)\)表示以\(st\)为起点,终点在\([l, r]\)内,里面的最大值的位置为\( ...
- LeetCode--11_974_Subarray_Sums_Divisible_by_K
题目链接:点击这里 public static int subarraysDivByK(int[] A, int K) { int ans = 0,sum = 0; int[] B = new int ...
- Asp.net MVC 权限过滤器实现方法的最佳实践
在项目开发中,为了安全.方便地判断用户是否有访问当前资源(Action)的权限,我们一般通过全局过滤器来实现. Asp.net MVC 页面中常见的权限判断使用过滤器主要在以下几种情况(根据权限判断的 ...