博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的内部类
阅读量:7236 次
发布时间:2019-06-29

本文共 2321 字,大约阅读时间需要 7 分钟。

知识点

       内部类的分类(成员内部类、局部内部类、匿名内部类)

       需要知道:如何创建成员内部类对象

                       当外部类和内部类变量重名时,如何区分

                        局部内部一般是怎样使用的

       关于匿名内部详细例子可参考博客 https://www.cnblogs.com/dolphin0520/p/3811445.html

一:内部类的分类

    在java中,一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,内部类一般分类,可以分为成员内部类(非静态成员内部类和静态成员内部类)、局部内部类、匿名内部类

(1)成员内部类

public class Person {
//Person是外部类 //成员内部类(非静态的static的) public class Mother{ public Mother(){ } } //成员内部类(静态的) public static class Father{ } } 内部类Mother和Father可以看做外部类Person的一个成员,Mother是非静态的成员内部类,Father是静态的成员内部类,对于这两种内部类对象创建,非静态的内部对象,先创建外部类的对象,然后通过外部类的对象调用内部类的构造器,而创建静态的内部类对象,则是直接调用内部类的构造器,具体创建代码如下:
public class Test {
public static void main(String[] args) {
//创建非静态内部类的对象(先创建外部类的对象,然后通过外部类的对象调用内部类的构造器) Person p=new Person(); Person.Mother m=p.new Mother(); //创建静态内部类的对象(外部类直接调用内部类的构造器) Person.Father f=new Person.Father(); } }
我们在成员内部类中,是可以直接访问外部类的成员属性和方法(包括static和private修饰的成员),当内部类和外部类的属性和方法重名时,内部类中默认调用内部类自己的属性和成员方法,若要访问外部重名的属性和方法使用 外部类.this.成员变量 外部类.this.成员方法
如果外部类想访问内部类成员,需要先创建一个成员内部类对象,然后通过指向这个对象的引用去访问
public class Person {
private String name="张三"; static int age=21;
public void showInfo(){ System.out.println("外部类的成员方法!"); } //成员内部类(非静态的static的) public class Mother{ String name="李四"; int age; public void setName(String name){ System.out.println(name); System.out.println(this.name); System.out.println(Person.this.name);//调用外部类中的private修饰的name属性 System.out.println(Person.this.age);//调用外部类中的static修饰的age属性 } //内部类中调用外部类的成员方法 public void innershowInfo(){ showInfo(); } } } 补充:静态成员内部类,和静态成员方法一样,不能调用外部的非静态的成员变量和方法
(2)局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,我们一般使用一个方法返回内部类的对象
//局部内部类 public class OuterClass {
public void method1(){
//仅仅创建一个局部内部,一般很少使用,一般用于返回内部类对象 class InnerClass{ } } //用法一 //常常使用一个方法,使其返回某个类或者接口,这个类或者接口在方法内部创建 public Comparable getComparable(){ //1.创建一个实现Comparable接口的类(局部内部类) class MyComparable implements Comparable{ @Override public int compareTo(Object o) { return 0; } } //2.返回一个实现类的对象 return new MyComparable(); } }
局部内部类像方法里面的一个局部变量一样,不能用public、protected、private以及static修饰符修饰的
(3)匿名内部类 public class OuterClass {
//用法二 public Comparable getComparable1(){ //返回一个实现Comparable接口的匿名内部类的对象 return new Comparable() { //匿名内部类 @Override public int compareTo(Object o) { return 0; } }; } }
在编写事件监听代码时,使用内部内部类代码方便易于维护,匿名内部类和局部内部类一样,不能有访问修饰符和static修饰的
 

转载于:https://www.cnblogs.com/shuaifing/p/10749346.html

你可能感兴趣的文章
给MySQL增加mysql-udf-http和mysql-udf-json自定义函数,让MySQL有调用http接口和查询直接回JSON的能力...
查看>>
hibernate 单元測试框架
查看>>
Android:关于声明文件中android:process属性说明
查看>>
elastic-job详解(五):自定义任务参数
查看>>
ubuntu设置分辨率
查看>>
Apache Kylin v3.0.0-alpha 正式发布
查看>>
区块链开发公司 区块链能否走上主义救援之路?
查看>>
机器会取代人类吗?
查看>>
实现Java热部署的几种解决方案
查看>>
Linux基础命令---mkswap
查看>>
LAMOST双星研究方面获进展
查看>>
数据结构探险之线性表篇(上):顺序表
查看>>
第三回 山有木兮木有枝,心说君兮君不知
查看>>
这么说吧,dubbo很简单,其实就是一个远程服务调用的框架
查看>>
Flume 日志收集系统 Spooldir-Source HDFS-sink
查看>>
题解 P1339 【[USACO09OCT]热浪Heat Wave】
查看>>
Flask從入門到入土(一)——程序的基本結構
查看>>
Windows 10不能正常打开开始菜单问题修复
查看>>
JFinal-layui v1.1 更新,极速开发企业应用系统
查看>>
部署WAR包实时查看Tomcat的状态和日志
查看>>