概念:内部类是类的第五个成员(属性、代码块、方法、构造器、内部类),所谓内部类,就是说允许一个类定义于另一个类的内部,前者称为内部类、后者称为外部类。

内部类又可分为两种:成员内部类局部内部类

一.成员内部类

概念:定义于外部类中,方法以外;

public class Hello {public static void main(String[] args){}
}
class Person{public void eat(){System.out.println("hhhh");}class dog{}
}

特点:
1.在外部类中,是外部类的成员;
2.可以使用四个修饰符(普通只能使用默认和public修饰)
3.可以使用static(全局/静态)、final(最终)、abstract(抽象)修饰;
4.可以在内部定义属性、方法、构造器

简单来说,内部类具有类和成员的特性;

二.局部内部类

概念:定义于外部类中,方法以内;

public class ceshi {public static void main(String[] args){}
}
class Person2{public void eat(){class apple{}}
}

特点:
1.具有类的一般性质,可以在内部定义属性、方法、构造器
2.不能使用四个修饰符
3.不能使用static(全局/静态)、final(最终)、abstract(抽象);

局部内部类的写法按照规格来说是这样

但是一般不这样用,那怎么用?一般这样用:
使用一个方法,使其返回值为某个类或接口的对象,而这个类或接口在方法内部创建

public class ceshi {public static void main(String[] args){}
}
interface Study{//定义一个接口
public int durk();
}
class Person2{//使用方式1public Study getStudy(){//创建一个实现Study接口的类(局部内部类)class Mystudy implements Study{public int durk(){return 1;}}//返回一个实现类的对象return new Mystudy();}//使用方式2//匿名方式public Study getStudy1(){//返回一个实现接口Study接口的匿名内部类对象return new Study() {public int durk() {return 0;}};}
}

关于局部内部类,这里在附一段使用代码;

public class ceshi {public static void main(String[] args){ceshi a=new ceshi();//实例化a用于调用getProduct()方法;Product p=a.getProduct();//实例化p用于接收a的调用结果;p.getPrice();p.getName();}//局部内部类使用public Product getProduct() {//实现Product接口的局部内部类class Camera implements Product{public void getName() {System.out.println("笔记本");}public void getPrice() {System.out.println("$1");}}return new Camera();//返回一个Camera的实例化对象}
}
interface Product{//定义接口void getName();void getPrice();
}

三.如何创建对象

(PS:接下来说到的都是成员内部类!!!)

首先,成员内部类可以分为两种:静态内部类非静态内部类,区分的方法也很简单,看是不是被static所修饰的即可判断;

class Person{class boy{//非静态内部类}static class  girl{//静态内部类}
}

1.静态内部类创建对象

格式:
外部类类名.内部类类名 对象 = new 外部类类名.内部类类名();

public class Hello {public static void main(String[] args){Person.girl xiaoming =new Person.girl();xiaoming.like();}
}
class Person{static class  girl{//静态内部类public void like(){System.out.println("看小说");}}
}

输出结果:

ps:外部类可以直接调用内部类的构造器

2.非静态内部类创建对象

格式:
1.创建外部类的对象
2.外部类类名.内部类类名 对象=外部类对象.new 内部类构造器();

public class Hello {public static void main(String[] args){Person a=new Person();Person.boy b=a.new boy();b.like();}
}
class Person{class boy{//非静态内部类public void like(){System.out.println("玩游戏");}}
}

输出结果:

四.如何区分外部类与内部类重名的对象

补充一个点,在内部类中,可以调用来自外部类的属性和方法

我把可能出现重名的状态分成三种:

1.外部类传进内部类的对象;(重名1号)
2.外部类中的对象;(重名2号)
3.当前内部类中的对象;(重名3号)
public class Hello {public static void main(String[] args){Person a=new Person();Person.boy b=a.new boy();b.getName("算不清账的大公司老板");//重名1号}
}
class Person{String name="总是打翻墨水小明";//重名2号class boy{String name="总是忘记带尺子的小李";//重名3号public void getName(String name){System.out.println(name);//打印重名1号System.out.println(Person.this.name);//打印重名2号System.out.println(this.name);//打印重名3号}}
}

输出结果:

五:总结

我目前关于内部类掌握的知识并不多,所以只能简单的总结了一下,
但是,我是个会上网的孩子。。。。。。。。。。
用一下一张图做了很好的总结(非原创)

图片来源:点这里

Java 简单笔记——内部类相关推荐

  1. Java编程笔记7:内部类

    Java编程笔记7:内部类 图源:PHP中文网 所谓的内部类,其实就是定义在类中的类.这和Java编程笔记6:接口 - 魔芋红茶's blog (icexmoon.xyz)中提到的接口嵌套的方式有点相 ...

  2. Java自学笔记——Java面向对象——04.抽象类、接口、内部类

    Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...

  3. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  4. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  5. Java编程笔记6:接口

    Java编程笔记6:接口 图源:PHP中文网 在Java中,接口可能只是特指使用interface关键字声明的一种抽象类型,但实际上在UML或者OOP中,接口往往是作为一种底层抽象概念而言的,其具体实 ...

  6. Java编程笔记9:容器(下)

    Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...

  7. 李兴华课程 java学习笔记

    学习笔记 第一章 Java Java的特点 1.java语言足够简单,正因为足够简单,所有才能让人们有更多的发挥空间 2.java是一门面向对象的编程语言 3.java是为数不多的多线程编程语言 4. ...

  8. Java基础笔记(4w字长文警告)

    Java核心笔记 提示:点击右上角关注博主,收获共同话题 下面是我的个人学习Java的笔记,现在分享给广大友友: 文章目录 Java核心笔记 0.导论 标柱注释: 学习方法: 1 java概述 1.1 ...

  9. 郑志远的java学习笔记

    郑志远的java学习笔记 郑志远    CCB 1         Java起源 略 2         Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...

最新文章

  1. 深度学习两大基础Tricks:Dropout和BN详解
  2. 参展神器| 算法告诉你优先参加哪个会展
  3. iOS 定位功能的实现
  4. 美团配送系统架构演进实践
  5. oracle sqlldr详解,sqlldr详解
  6. 2020.2idea怎么创建html项目_如何为IDEA项目创建GitHub存储库和本地Git存储库
  7. SQL Server实例的十大安全注意事项
  8. SAP 生产订单变更管理 OCM Order Changement Management
  9. startActivityForResult调用后立即响应了OnActivityResult()方法,导致setResult()后无响应
  10. java jdk 文档下载_JDK8 API文档(下载)
  11. 【转载】Unity3D导入FBX模型的相关属性介绍
  12. 互联网寒冬,这个技术领域的人才需求却持续爆表
  13. 使用HTML制作在线电子时钟,用HTML5制作数字时钟的教程
  14. JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
  15. 【bfs 反向建边】2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) Jumping
  16. ado全称_JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
  17. 救ANGEL出监狱BFS
  18. CobaltStrike逆向学习系列(15):CS功能分析-BOF
  19. 墨尘 - UE4 入门教程笔记 —— 二
  20. AT指令(中文详解版)(二)

热门文章

  1. 虚拟机安装centos7的小坑-找不到网卡
  2. html中元素居中的五种方法
  3. html抽奖不重复,javascript随机抽取0-100之间不重复的10个数
  4. 软考和华为认证哪个好?更利于求职?
  5. Tomcat关闭日志输出
  6. 建校百年,这所985大学计算机学部成立!
  7. 小学一年级计算机上课内容,小学信息技术一年级教案
  8. Python 字符串练习
  9. 公务员计算机考试警察考什么时候开始,2017年公务员招考,全市公安机关招录78名人民警察,3月1日起报名(附职位表)...
  10. c语言 删除数组中的一个(某个)元素