Java的四种内部类(含代码实例)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!
本博客全网唯一合法URL:https://www.cnblogs.com/acm-icpcer/p/8575721.html
Java的四种内部类包括如下:
1、成员内部类
2、静态内部类
3、局部内部类
4、匿名内部类
现一一说明:
1、成员内部类
简单的讲就是:
(1)没有使用static修饰的内部类;
(2)在成员内部类中不允许出现静态变量和静态方法的声明。static只能用在静态常量的声明上。
(3)成员内部类中可以访问外部类中所有的成员(变量,方法),包含私有成员,如果在内部类中定义有和外部类同名的实例变量,访问方法如下:
OuterClass.this.outerMember;
(4)构建内部类的实例,要求必须外部类的实例先存在。
sample code:
class MemberOuter{
private String s1 = "Outer InstanceMar";
private String s2 = "OuterStatic s2";
public void setS1(String s1) {
this.s1 = s1;
new MemberOuter().new MemberInner();
this.new MemberInner(); //此时MemberOuter已经实例化完成,所以可以使用this
new MemberInner().test2();
}
public static void test2 (){
new MemberOuter().new MemberInner();
/*
this.new MemberInner();
此时MemberOuter没有实例化完成,所以不可以使用this
static 是在MemberOuter构造器前使用,所以此时this不能使用
*/
}
class MemberInner{
String s1= "Inner instanceMae ";
static final String s4 = "static final MemberInner";
void test2(){
System.out.println(" s1 =" + s1);
System.out.println(" Outter MemberOuter.this.s1 =" + MemberOuter.this.s1);
System.out.println("s2 = "+s2);
}
}
}
public class MemberInnerTest {
public static void main (String args []){
/* MemberOuter.MemberInner mm = new MemberOuter().new MemberInner();
mm.test2();*/
MemberOuter mo = new MemberOuter();
mo.setS1("");
}
}
2、静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
sample code:
public class StaticInnerTest {
public static void main(String[] args) {
StaticOuter.StaticInner si = new StaticOuter.StaticInner();
si.test2();
//StaticOuter.StaticInner.test();
System.out.println("si.b = "+si.b);
System.out.println("si.a = "+si.a);
// System.out.println("StaticOuter.b = "+StaticOuter.b); 这里报错
}
}
class StaticOuter {
private int a = 100;
private static int b = 150;
public static void test(){
System.out.println("Outer static test ...");
}
public void test2(){
System.out.println("Outer instabce test ...");
}
static class StaticInner {
public int a = 200;
static int b =300;
public static void test(){
System.out.println("Inner static test ...");
}
public void test2(){
System.out.println("Inner instance test ...");
StaticOuter.test();
new StaticOuter().test2();
System.out.println("StaticOuter.b = "+StaticOuter.b);
}
}
}
3、局部内部类
简单的说就是:
(1)定义在方法体,甚至比方法体更小的代码块中
(2)类比局部变量。
(3)局部内部类是所有内部类中最少使用的一种形式。
(4)局部内部类可以访问的外部类的成员根据所在方法体不同。
(5)在静态方法中:可以访问外部类中所有静态成员,包含私有;
在实例方法中:可以访问外部类中所有的成员,包含私有;
局部内部类可以访问所在方法中定义的局部变量,但是要求局部变量必须使用final修饰。
sample code:
public class LocalInnerTest {
private int a = 1;
private static int b = 2;
public void test() {
final int c = 3;
class LocalInner {
public void add1() {
System.out.println("a= " + a);
System.out.println("b= " + b);
System.out.println("c= " + c);
}
}
new LocalInner().add1();
}
static public void test2() {
final int d = 5;
class LocalInner2 {
public void add1() {
// System.out.println("a= " + a);
System.out.println("b= " + b);
System.out.println("c= " + d);
}
}
new LocalInner2().add1();
}
public static void main(String args[]) {
// LocalInnerTest() lc = new LocalInnerTest();
new LocalInnerTest().test2();
new LocalInnerTest().test();
}
}
4、匿名内部类
(1)没有名字的局部内部类。
(2)没有class,interface,implements,extends关键字
(3)没有构造器。
(4)一般隐式的继承某一个父类或者实现某一个接口
(5)为了方便和速成而写的类,一般只使用一次,复用性不高。
sample code:
interface innerclass{
public void print();
}
public class Main{
public static void main(String[] args)
{
innerclass A = new innerclass() {
public void print() {
System.out.println("匿名内部类1");
}
};
A.print();
innerclass B = new innerclass() {
public void print() {
System.out.println("匿名内部类2");
}
};
B.print();
A.print();
}
}
tz@COI HZAU
2018/3/15
Java的四种内部类(含代码实例)的更多相关文章
- Java的四种内部类
Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...
- java的四种内部类详解
引言 内部类,嵌套在另一个类的里面,所以也称为:嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...
- 类与接口(二)java的四种内部类详解
引言 内部类,嵌套在另一个类的里面,所以也称为 嵌套类; 内部类分为以下四种: 静态内部类 成员内部类 局部内部类 匿名内部类 一.静态内部类 静态内部类: 一般也称"静态嵌套类" ...
- java的四种内部类(转)
一般来说,有4中内部类:常规内部类.静态内部类.局部内部类.匿名内部类. 一.常规内部类:常规内部类没有用static修饰且定义在在外部类类体中. 1.常规内部类中的方法可以直接使用外部类的实例变量 ...
- Java中的四种内部类
Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...
- java内部类及四种内部类的实现方式
java内部类及四种内部类的实现方式 一.内部类定义:内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类. 二.为何要内部类?a.内部类提供了某种进入外围类的窗户.b.也是最吸引人的原因, ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...
- httpClient Post例子,Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
httpclient post方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //----1. HttpPost request = new HttpPost(ur ...
随机推荐
- linux删除软连接
#mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建tes ...
- Socket网络编程--简单Web服务器(6)
本来是想实现ssl连接的,但是弄了好久都不成功,就索性不做了,等以后有能力再做了.所以这一小节就是本次的最后一节了.就简单的说几个注意点. 1.加个配置文件 使用单例模式,使用一个类,该类保存一些信息 ...
- Python list 常用方法总结
一,创建列表 只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1 list = ['1',‘2,‘3’] list = [] 空 ...
- 为什么一点onclick按钮就提交表单?
下面是一个表单,有一个onclick按钮,点击后上面文本框的内容被添加到下面的文本域中,并可以一直添加,然后点击submit后提交到另一个页面.但是,在Ie9或者火狐浏览器中我一点onclick为什么 ...
- Mac xcode 配置OpenGL
配置过程 安装homebrew 打开命令行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ ...
- 一键解包/打包boot.img/recovery.img工具(高通/MTK双版 支持android 5.1以上)
下载地址: 链接: https://pan.baidu.com/s/1hsA2oWc 密码: skdx
- 集群介绍 keepalived介绍 用keepalived配置高可用集群
集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...
- jexl2 执行字符串Java代码
一,引入jar包, <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-jexl --><depen ...
- [Localization] YOLO: Real-Time Object Detection
Ref: https://pjreddie.com/darknet/yolo/ 关注点在于,为何变得更快? 论文笔记:You Only Look Once: Unified, Real-Time Ob ...
- Python实现C代码统计工具(三)
目录 Python实现C代码统计工具(三) 声明 一. 性能分析 1.1 分析单条语句 1.2 分析代码片段 1.3 分析整个模块 二. 制作exe Python实现C代码统计工具(三) 标签: Py ...