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基础之:详解内部类(转载)
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
随机推荐
- Ubuntu 10.04 配置TQ2440交叉编译环境
一.解压交叉编译开发工具包 EABI_4.3.3_EmbedSky_20100610.tar.bz2 $ sudo mkdir /opt/EmbedSky/ $ sudo cp -r /ho ...
- CF712E Memory and Casinos 期望概率
题意:\(n\)个赌场,每个赌场有\(p_{i}\)的胜率,如果赢了就走到下一个赌场,输了就退回上一个赌场,规定\(1\)号赌场的上一个是\(0\)号赌场,\(n\)号赌场的下一个是\(n + 1\) ...
- 【转载】 HDU 动态规划46题【只提供思路与状态转移方程】
1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数) ...
- XML签名Cannot resolve element with ID XXXX 解决方案
最近同银行做接口联调,需要对XML文件做加签和解签操作,本地的开发环境是Mac 10.10,JDK的版本是1.6.0.65.小小的一段加签代码,一直报错,却久久也找不到解决方法,网上的资料非常少,错误 ...
- [DeeplearningAI笔记]序列模型2.10词嵌入除偏
5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.10词嵌入除偏 Debiasing word embeddings Bolukbasi T, Chang K W, Zo ...
- [DeeplearningAI笔记]序列模型2.9情感分类
5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9 Sentiment classification 情感分类 情感分类任务简单来说是看一段文本,然后分辨这个人是否喜欢 ...
- python列表排序方法reverse、sort、sorted
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- CSS浏览器兼容问题集-第四部分
12.FireFox下如何使连续长字段自动换行 众所周知IE中直接使用 word-wrap:break-word 就可以了, FF中我们使用JS插入 的方法来解决 <style type=&qu ...
- Bzoj2300 / 洛谷P2521 [HAOI2011]防线修建
题目描述 近来A国和B国的矛盾激化,为了预防不测,A国准备修建一条长长的防线,当然修建防线的话,肯定要把需要保护的城市修在防线内部了.可是A国上层现在还犹豫不决,到底该把哪些城市作为保护对象呢?又由于 ...
- cms替换主页
cms替换主页的步骤 1.先做好静态页面: 2.在D:\wamp\www\phpcms\install_package\phpcms\templates文件夹下建新的文件夹tianqiwangluo( ...