Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)
Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
内部类的主要作用:使用内部类可以减少命名冲突。
定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中。
广义上讲,内部类分为四种:
静态内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)
1、静态内部类(static inner classes)
最简单的内部类。
只能访问外部类的静态成员变量与静态方法。
生成静态内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
相关使用例子:静态内部类
class StaticInner{
private static int a = ;
/**
4 * 静态内部类
5 * 生成的类名:StaticInner$InnerClass
6 */
public static class InnerClass{
8 //静态内部类可以声明静态的成员变量,其他的内部类不可以
private static int b = ;
public void execute(){
//静态内部类只能访问静态程序
System.out.println(a + b);
}
}
}
//main方法中使用:
public static void main(String[] args) {
//创建静态内部类
StaticInner.InnerClass innerClass = new StaticInner.InnerClass();
innerClass.execute();
}
2、成员内部类(member inner classes):
成员内部类可以访问外部类的静态与非静态的方法和成员变量。
生成成员内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部内部类中访问外部类的成员变量的方法:
OuterClass.this.a;
相关使用例子:成员内部类
class MemberInner{
private int a = ;
public void execute(){
//在外部类中创建成员内部类
InnerClass innerClass = this.new InnerClass();
}
/**
10 * 成员内部类
11 */
public class InnerClass{
//内部类可以创建与外部类同名的成员变量
private int a = ;
public void execute(){
//this引用的是内部类
System.out.println(this.a);
//在内部了中使用外部类的成员变量的方法
System.out.println(MemberInner.this.a);
}
}
}
//在main方法中使用:
public static void main(String[] args) {
//创建成员内部类
MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();
innerClass.execute();
}
3、局部内部类(local inner classes):
类似于局部变量,不能定义为public,protected,private或者static类型。
定义方法中,只能方法中声明为final类型的变量。
相关使用例子:局部内部类
class LocalInner{
public void execute(){
final int a = ;
/**
6 创建局部内部类
7 */
class InnerClass{
public void execute(){
System.out.println("LocalInner Class”);
//局部内部类只能访问final类型的变量
System.out.println(a);
}
}
//只能在所在方法区域创建
new InnerClass().execute();
}
}
//在main方法中使用:
public static void main(String[] args) {
//外部不能直接创建局部内部类
LocalInner localInner = new LocalInner();
localInner.execute();
}
4、匿名内部类(anonymous inner classes):
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。
相关使用例子:匿名内部类
public static void main(String[] args) {
AnonymousInnerClassTest test = new AnonymousInnerClassTest();
/**
5 * 创建匿名内部类
6 * 生成的类名:AnonymousInnerClassTest$1
7 */
test.print(new Date(){
//重写toString()方法
@Override
public String toString() {
return "Hello world.";
}
});
JButton button = new JButton();
/**
19 * 创建匿名内部类
20 * 该匿名内部类实现ActionListener接口
21 * 生成的类名:AnonymousInnerClassTest$1
22 */
button.addActionListener(new ActionListener(){
//实现接口中的方法
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("使用匿名内部类实现ActionListener接口");
}
});
}
public void print(Date date){
System.out.println(date);
}
Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)的更多相关文章
- Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类
笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...
- Java内部类(3):局部内部类
有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成 ...
- java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类
提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...
- java中什么是局部内部类Local inner class?
5.局部内部类Local inner class 马克-to-win:什么叫局部内部类?内部类声明位置:1.它的外部类的范围之内.2.在几个程序块的范围之内.例如,由方法定义的块中或甚至在for循环体 ...
- java内部类深入详解 内部类的分类 特点 定义方式 使用
本文关键词: java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内 ...
- Java 内部类(成员内部类、局部内部类、静态内部类,匿名内部类)
一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用publ ...
- 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类
内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...
- java基础:熟悉3种内部类的写法,重点匿名内部类的使用
一.内部类定义 内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类.嵌套类分为两种,即静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即 ...
随机推荐
- Daily Scrum 12.7
摘要:本次会议主要是为了分配任务.我们对于各自将要进行的任务进行了讨论,并最终确定下了我们每个人Beta版本将要进行的任务.因为vs中任务的编写在此次会议之后,所以迭代时直接填写了已完成时间. Tas ...
- FB接口之 js调用支付窗口
官方文档: https://developers.facebook.com/docs/reference/dialogs/pay/ <html xmlns="http://www.w3 ...
- Jquery $.getJSON()设置同步
如下: $.ajaxSettings.async = false; $.getJSON('/AjaxSwitchDynamicInfo/GetPortUsedCount.cspx', { switch ...
- android 开发Parcelable 怎么传值ArrayList
public class TradeEntity implements Parcelable{ public String id; //有关进度条的参数 ArrayList<TradeState ...
- android开发,socket发送文件,read阻塞,得不到文件尾-1
这是我的接收文件代码:开始可以读取到-1,但是现在又读取不到了,所以才加上红色字解决的(注释的代码) File file = new File(mfilePath,"chetou." ...
- Google Guava学习笔记——基础工具类String处理类的使用
不管你喜欢何种编程语言,很多时候针对string编程的处理都是乏味而且爱出错误的,很多时候,我们需要从文件或是数据库中读取数据,或者根据需求重新格式化或排序字符串给用户显示.幸运的是,Guava提供了 ...
- Winform DataGridView扩展
public class ObjectPropertyCompare<T> : IComparer<T> { private readonly PropertyDescript ...
- [工作积累] OpenGL ES3.0: glInvalidateFramebuffer
https://www.khronos.org/opengles/sdk/docs/man3/html/glInvalidateFramebuffer.xhtml 这个在GLES2.0上只有Exten ...
- IIS Express 及 vs2008下使用IIS Express
介绍 IIS Express 开发 ASP.NET 的应用程序是我的主要工作.当然我会选择最适合的开发环境.客户多属于企业用户,我的开发的选择,多半是 ASP.NET Web Application ...
- android 关于Location of the Android SDK has not been setup in the preferences的解决方法
今天在部署android开发环境的时候,每次打开eclipse的时候点击AVD Manager的按钮就会弹出Location of the Android SDK has not been setup ...