java基础15 内部类(成员内部类、局部内部类)和匿名内部类
一、内部类
1.1.1、成员内部类
一个类定义在另一个类的内部,那么该类就叫作成员内部类
1.1.2、成员内部类访问方式
方式一:在外部类中提供一个方法创建内部类的对象进行访问
方式二:在其他类中创建内部类的对象: 格式:外部类.内部类 变量名=new 外部类().new 内部类();
注意:如果是一个静态的内部类,那么其他内的创建的格式
外部类.内部类 变量名 = new 外部类.内部类();
方式一:
/* 方式一 */ //外部类
class Outer{
int 1 = 100;
//成员外部类
class Inner{
int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+i);
}
}
//在外部的方法中创建内部类的对象,然后调用内部方法
public void instance(){
Inner inner=new Inner();
inner.print();
}
}
class Demo3 {
public static void main(String[] args) {
Outer o=new Outer();
o.instance();
}
}
方式二:
/* 方式二 */ //外部类
class Outer{
int i = 100;
//成员外部类
class Inner{
int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+i);
}
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();
inner.print();
}
}
注意:静态内部类的调用方法
//外部类
class Outer{
int i = 100;
//成员内部类
static class Inner{
static int i = 10;
public void print(){
System.out.println("这是内部类的的print方法!..."+t);
}
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner=new Outer.Inner();//静态的内部类
inner.print();
}
}
1.1.3、内部类应用的场景
我们描述A事物的时候,发现描述A事物还存在另外一个比较复杂事物B的时候,而且这个比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候我们就可以使用内部类描述B事物
比如: 人-------->心脏 等等。
class 人{ //外部类
血液
氧气
等....
class 心脏{ //内部类
.... }
}
1.1.4、内部类的好处
内部类可以直接访问外部类的所有成员
1.1.5、内部内需要注意的细节:
1.如果内部类和外部类存在同名的成员时,在内部类中默认访问的是内部类的成员变量,可以通过"外部类.this.成员变量名"指定访问外部类的成员
2.私有的成员内部类只能在外部类中类中提供一个方法创建内部类对象进行访问,不能在其他类中创建对象了.
3.成员内部类一旦出现静态成员,那么该类必须用static修饰
//外部类
class Outer{
int i=100;//outer.class文件被加载到内存时存在内中.静态的成员数据是不需要对象存在才能访问的
public int test(){
System.out.println("hello,你好");
return 1;
}
//成员内部类
class Inner{
int t=i;
public void print(){
System.out.println("这是内部类的的print方法!..."+t);
}
int c=test();
}
//在外部的方法中创建内部类的对象,然后调用内部方法
public void instance(){
Inner inner=new Inner();
inner.print();
}
}
class Demo3 {
public static void main(String[] args) {
Outer.Inner inner=new Outer().new Inner();
//Outer.Inner inner=new Outer.Inner();//静态的内部类
inner.print();
//System.out.println(Outer.Inner.i);
Outer o=new Outer();
o.instance();
}
}
1.2.1、局部内部类
在一个类的方法内定义另一个类,那么另一个类就称作为局部内部类.
1.2.2、局部内部类需要注意的细节
1.如果局部内部类访问一个局部变量,那么该局部变量必须使用final修饰
1 //外部类
2 class Outer{
private String name="外部类的name";
public void eat(){ //外部类的方法
final int i=10;
//局部内部类
class Inner{
//int i;
public void print(){
System.out.println("这是局部内部类的方法......"+i);
}
}
//实例化局部内部类
Inner inner=new Inner();
inner.print();
}
}
class Demo4 {
public static void main(String[] args) {
Outer o=new Outer();
o.eat();
}
}
二、匿名内部类
2.1、匿名内部类
没有名字的类名称作为匿名内部类
2.2、匿名内部类的好处
简化书写
2.3、匿名内部类的使用前提
必须存在继承或者实现关系才能使用
继承关系下的匿名内部类
//继承关系下的匿名内部类
abstract class Animal{
public abstract Animal run();
public abstract void sleep();
} class Outher{
public void print(){
//匿名内部类:只是没有类名,其他的一概成员都具备的
//匿名内部类与Animal是继承关系,目前是Animal子类的对象
Animal a = new Animal(){ //多态 new Animal():是一个子类对象
//匿名内部的成员
public Animal run(){
System.out.println("狗在跑.....");
return this;
}
public void sleep(){
System.out.println("狗趴着睁着眼睛睡......");
}
};
a.run();
a.sleep(); }
}
class Demo6 {
public static void main(String[] args) {
Outher o=new Outher();
o.print();
}
}
或者
//继承关系下的匿名内部类
abstract class Animal{
public abstract Animal run();
public abstract void sleep();
} class Outher{
public void print(){
//匿名内部类:只是没有类名,其他的一概成员都具备的
//匿名内部类与Animal是继承关系,目前是Animal子类的对象
new Animal(){ //多态 new Animal():是一个子类对象
//匿名内部的成员
public Animal run(){
System.out.println("狗在跑.....");
return this;
}
public void sleep(){
System.out.println("狗趴着睁着眼睛睡......");
}
}.run().sleep();
}
}
class Demo6 {
public static void main(String[] args) {
Outher o=new Outher();
o.print();
}
}
实现关系下的匿名内部类
//实现关系下的匿名内部类
interface Dao{ //接口
public void add();
}
//接口的实现
class t implements Dao{
public void add(){ }
}
//外部类
class Outer{
public void print(){ //外部类的方法
//创建一个匿名的内部类的对象
new Dao(){//不是说好的接口不能实例话吗?现在咋又实例化了啊! 其实:(匿名内部类实现了Dao),实现关系
public void add(){
System.out.println("添加成功");
}
}.add();
}
} class Demo7{
public static void main(String[] args) {
Outer o = new Outer();
o.print();
}
}
或者
//实现关系下的匿名内部类
interface Dao{
public void add();
} class t implements Dao{
public void add(){ }
}
/*
class Outer{
public void print(){
//创建一个匿名的内部类的对象
new Dao(){//不是说好的接口不能实例话吗?现在咋又实例化了啊! (匿名内部类实现了Dao)实现关系
public void add(){
System.out.println("添加成功");
}
}.add();
}
}
*/
class Demo7{
public static void main(String[] args) {
test(new Dao(){//Dao的一个匿名实现类
public void add(){
System.out.println("添加成功");
}
});
}
//调用这个方法
public static void test(Dao d){//形参类型是一个接口引用.....(多态)
d.add();
}
}
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:http://www.cnblogs.com/dshore123/p/8920503.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
检测语言 世界语 中文简体 中文繁体 丹麦语 乌克兰语 乌兹别克语 乌尔都语 亚美尼亚语 伊博语 俄语 保加利亚语 僧伽罗语 克罗地亚语 冰岛语 加利西亚语 加泰罗尼亚语 匈牙利语 南非祖鲁语 卡纳达语 印地语 印尼巽他语 印尼爪哇语 印尼语 古吉拉特语 哈萨克语 土耳其语 塔吉克语 塞尔维亚语 塞索托语 威尔士语 孟加拉语 宿务语 尼泊尔语 巴斯克语 布尔语(南非荷兰语) 希伯来语 希腊语 德语 意大利语 意第绪语 拉丁语 拉脱维亚语 挪威语 捷克语 斯洛伐克语 斯洛文尼亚语 斯瓦希里语 旁遮普语 日语 格鲁吉亚语 毛利语 法语 波兰语 波斯尼亚语 波斯语 泰卢固语 泰米尔语 泰语 海地克里奥尔语 爱尔兰语 爱沙尼亚语 瑞典语 白俄罗斯语 立陶宛语 索马里语 约鲁巴语 缅甸语 罗马尼亚语 老挝语 芬兰语 苗语 英语 荷兰语 菲律宾语 葡萄牙语 蒙古语 西班牙语 豪萨语 越南语 阿塞拜疆语 阿尔巴尼亚语 阿拉伯语 韩语 马其顿语 马尔加什语 马拉地语 马拉雅拉姆语 马来语 马耳他语 高棉语 齐切瓦语 |
世界语 中文简体 中文繁体 丹麦语 乌克兰语 乌兹别克语 乌尔都语 亚美尼亚语 伊博语 俄语 保加利亚语 僧伽罗语 克罗地亚语 冰岛语 加利西亚语 加泰罗尼亚语 匈牙利语 南非祖鲁语 卡纳达语 印地语 印尼巽他语 印尼爪哇语 印尼语 古吉拉特语 哈萨克语 土耳其语 塔吉克语 塞尔维亚语 塞索托语 威尔士语 孟加拉语 宿务语 尼泊尔语 巴斯克语 布尔语(南非荷兰语) 希伯来语 希腊语 德语 意大利语 意第绪语 拉丁语 拉脱维亚语 挪威语 捷克语 斯洛伐克语 斯洛文尼亚语 斯瓦希里语 旁遮普语 日语 格鲁吉亚语 毛利语 法语 波兰语 波斯尼亚语 波斯语 泰卢固语 泰米尔语 泰语 海地克里奥尔语 爱尔兰语 爱沙尼亚语 瑞典语 白俄罗斯语 立陶宛语 索马里语 约鲁巴语 缅甸语 罗马尼亚语 老挝语 芬兰语 苗语 英语 荷兰语 菲律宾语 葡萄牙语 蒙古语 西班牙语 豪萨语 越南语 阿塞拜疆语 阿尔巴尼亚语 阿拉伯语 韩语 马其顿语 马尔加什语 马拉地语 马拉雅拉姆语 马来语 马耳他语 高棉语 齐切瓦语 |
java基础15 内部类(成员内部类、局部内部类)和匿名内部类的更多相关文章
- Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案
内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...
- 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类
内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...
- java基础之修饰符和内部类
1.java修饰符 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰 ...
- Java基础8:深入理解内部类
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第一百章:局部内部类可以实现接口吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第九十八章:局部内部类访问作用域成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类
笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...
- java基础之:详解内部类(转载)
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
随机推荐
- [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...
- 【BZOJ4754】独特的树叶(哈希)
[BZOJ4754]独特的树叶(哈希) 题面 BZOJ 给定一个\(n\)个节点的树A和一个\(n+1\)个节点的树\(B\) 求\(B\)的一个编号最小的节点,使得删去这个节点后\(A,B\)同构 ...
- BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】
题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...
- 【noip2018】【luogu5024】保卫王国
题目描述 Z 国有nn座城市,n - 1n−1条双向道路,每条双向道路连接两座城市,且任意两座城市 都能通过若干条道路相互到达. Z 国的国防部长小 Z 要在城市中驻扎军队.驻扎军队需要满足如下几个条 ...
- shell中的引用
By francis_hao Mar 31,2018 引用,用来移除某个字符或单词对于shell的特殊含义 每个元字符对于shell都有特殊含义,可分割单词,如果想使用其本身的含义就需要用到 ...
- Spring MVC @CookieValue注解
@CookieValue的作用 用来获取Cookie中的值 @CookieValue参数 1.value:参数名称 2.required:是否必须 3.defaultValue:默认值 @Cookie ...
- mysql group_concat方法用法
目前有三张表: 课程表: course,里面有student_id 学生表: student,里面有 name 字段 中间表(课程和学生一对多): course_student, 里面有 co ...
- eclipse常用快捷键大全 (转)
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- vector的哈希值 Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C
http://codeforces.com/contest/757/problem/C 题目大意:有n个导管,每个体育馆有k种神奇宝贝,然后所有的n个体育馆中,一共有m中神奇宝贝.可知,每个神奇宝贝中 ...
- [洛谷P2750] [USACO5.5]贰五语言Two Five
洛谷题目链接:[USACO5.5]贰五语言Two Five 题目描述 有一种奇怪的语言叫做"贰五语言".它的每个单词都由A-Y这25个字母各一个组成.但是,并不是任何一种排列都是一 ...