Java 简单笔记——内部类
概念:内部类是类的第五个成员(属性、代码块、方法、构造器、内部类),所谓内部类,就是说允许一个类定义于另一个类的内部,前者称为内部类、后者称为外部类。
内部类又可分为两种:成员内部类和局部内部类;
一.成员内部类
概念:定义于外部类中,方法以外;
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 简单笔记——内部类相关推荐
- Java编程笔记7:内部类
Java编程笔记7:内部类 图源:PHP中文网 所谓的内部类,其实就是定义在类中的类.这和Java编程笔记6:接口 - 魔芋红茶's blog (icexmoon.xyz)中提到的接口嵌套的方式有点相 ...
- Java自学笔记——Java面向对象——04.抽象类、接口、内部类
Java 面向对象各节 Java自学笔记--Java面向对象--01.回顾方法 Java自学笔记--Java面向对象--02.构造器.类和对象 Java自学笔记--Java面向对象--03.封装.继承 ...
- Java学习笔记二十:Java中的内部类
Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- Java编程笔记6:接口
Java编程笔记6:接口 图源:PHP中文网 在Java中,接口可能只是特指使用interface关键字声明的一种抽象类型,但实际上在UML或者OOP中,接口往往是作为一种底层抽象概念而言的,其具体实 ...
- Java编程笔记9:容器(下)
Java编程笔记9:容器(下) 图源:PHP中文网 本篇文章是Java编程笔记8:容器(上) - 魔芋红茶's blog (icexmoon.xyz)的下篇. Set Set也是一种常见的数据类型,很 ...
- 李兴华课程 java学习笔记
学习笔记 第一章 Java Java的特点 1.java语言足够简单,正因为足够简单,所有才能让人们有更多的发挥空间 2.java是一门面向对象的编程语言 3.java是为数不多的多线程编程语言 4. ...
- Java基础笔记(4w字长文警告)
Java核心笔记 提示:点击右上角关注博主,收获共同话题 下面是我的个人学习Java的笔记,现在分享给广大友友: 文章目录 Java核心笔记 0.导论 标柱注释: 学习方法: 1 java概述 1.1 ...
- 郑志远的java学习笔记
郑志远的java学习笔记 郑志远 CCB 1 Java起源 略 2 Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...
最新文章
- 深度学习两大基础Tricks:Dropout和BN详解
- 参展神器| 算法告诉你优先参加哪个会展
- iOS 定位功能的实现
- 美团配送系统架构演进实践
- oracle sqlldr详解,sqlldr详解
- 2020.2idea怎么创建html项目_如何为IDEA项目创建GitHub存储库和本地Git存储库
- SQL Server实例的十大安全注意事项
- SAP 生产订单变更管理 OCM Order Changement Management
- startActivityForResult调用后立即响应了OnActivityResult()方法,导致setResult()后无响应
- java jdk 文档下载_JDK8 API文档(下载)
- 【转载】Unity3D导入FBX模型的相关属性介绍
- 互联网寒冬,这个技术领域的人才需求却持续爆表
- 使用HTML制作在线电子时钟,用HTML5制作数字时钟的教程
- JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
- 【bfs 反向建边】2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) Jumping
- ado全称_JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
- 救ANGEL出监狱BFS
- CobaltStrike逆向学习系列(15):CS功能分析-BOF
- 墨尘 - UE4 入门教程笔记 —— 二
- AT指令(中文详解版)(二)