一、内部类

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

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

 
 
 
G
M
T
 
检测语言
世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
  世界语
中文简体
中文繁体
丹麦语
乌克兰语
乌兹别克语
乌尔都语
亚美尼亚语
伊博语
俄语
保加利亚语
僧伽罗语
克罗地亚语
冰岛语
加利西亚语
加泰罗尼亚语
匈牙利语
南非祖鲁语
卡纳达语
印地语
印尼巽他语
印尼爪哇语
印尼语
古吉拉特语
哈萨克语
土耳其语
塔吉克语
塞尔维亚语
塞索托语
威尔士语
孟加拉语
宿务语
尼泊尔语
巴斯克语
布尔语(南非荷兰语)
希伯来语
希腊语
德语
意大利语
意第绪语
拉丁语
拉脱维亚语
挪威语
捷克语
斯洛伐克语
斯洛文尼亚语
斯瓦希里语
旁遮普语
日语
格鲁吉亚语
毛利语
法语
波兰语
波斯尼亚语
波斯语
泰卢固语
泰米尔语
泰语
海地克里奥尔语
爱尔兰语
爱沙尼亚语
瑞典语
白俄罗斯语
立陶宛语
索马里语
约鲁巴语
缅甸语
罗马尼亚语
老挝语
芬兰语
苗语
英语
荷兰语
菲律宾语
葡萄牙语
蒙古语
西班牙语
豪萨语
越南语
阿塞拜疆语
阿尔巴尼亚语
阿拉伯语
韩语
马其顿语
马尔加什语
马拉地语
马拉雅拉姆语
马来语
马耳他语
高棉语
齐切瓦语
         
 
 
 
文本转语音功能仅限200个字符
 
  选项 : 历史 : 反馈 : Donate 关闭

java基础15 内部类(成员内部类、局部内部类)和匿名内部类的更多相关文章

  1. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  2. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  3. java基础之修饰符和内部类

    1.java修饰符 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: 权限修饰符:默认修饰 ...

  4. Java基础8:深入理解内部类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. “全栈2019”Java第一百一十章:局部内部类与匿名内部类区别详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第一百章:局部内部类可以实现接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. “全栈2019”Java第九十八章:局部内部类访问作用域成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类

    笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...

  9. java基础之:详解内部类(转载)

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

随机推荐

  1. oracle 11g用户名的大小写问题

    oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_logon=false 设置改为不区分大小写.

  2. 漫谈ElasticSearch关于ES性能调优几件必须知道的事

    lasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人惊 ...

  3. 【SPOJ】QTREE6(Link-Cut-Tree)

    [SPOJ]QTREE6(Link-Cut-Tree) 题面 Vjudge 题解 很神奇的一道题目 我们发现点有黑白两种,又是动态加边/删边 不难想到\(LCT\) 最爆力的做法,显然是每次修改单点颜 ...

  4. 表格隔行变色_CSS实现鼠标悬停高亮

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  5. String和stringbuffer和stringbuilder的区别

    String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要 ...

  6. bzoj3251: 树上三角形(思维题)

    神tmWA了8发调了20min才发现输出没回车T T... 首先考虑一段什么样的序列才会是N... 显然最长的形式就是斐波那契,前两数之和等于第三数之和,这样就无法组成三角形并且序列最长.可以发现在i ...

  7. Codeforces 931.F Teodor is not a liar!

    F. Teodor is not a liar! time limit per test 1 second memory limit per test 256 megabytes input stan ...

  8. 12.UiAutomator 获取系统信息

    一.Build构建信息 1.build类: Build类提供了硬件厂商.编号.序列号.SDK版本等重要信息. 类名:android.os.Build 常量名 说明 BOARD 底层板名称 BOOTLO ...

  9. tp between

    $a = array( 'time' => array('between',[c,d]) ); c<= time <= d

  10. animatescroll.min.js ~~~~ jq滚动效果 优化target自定义方法

    $(".meun>div[name='meun_nav']>a").eq(1).on("click",function(){ $("bod ...