老王学java8周第一天
内部类的概念 与分类:
一个类是用来模拟一个事物的,如果一个事物的内部包含另一个事物,那么这也就是一个类内部包含另一个类。
例如: 身体和心脏的关系。又例如:汽车和发动机的关系。
分类:
1,成员内部类:
2,局部内部类:(包含匿名内部类):
成员内部类的定义格式:
修饰符 calss 外部类名称{
修饰符 calss 内部类名称{
//…
}
//…
}
注意:内部类使用外部类,我们叫内用外,可以随意访问;外用内,需要内部类对象。
=============
如何使用内部类,有两种方式:
1,间接方式:在外部类的方法当中,使用内部类:然后main只是调用外部类的方法。
2,直接调用:公式:
类名称 对象名= new 类名称();
【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();】
public class Body {//外部类public class Heart{//成员内部类//内部类的方法public void beat(){System.out.println("心脏跳动:蹦蹦蹦");System.out.println("我叫:" + name);//正确写法!}}//外部类的成员变量private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}//外部类方法public void methodBody(){System.out.println("外部类的方法");
// Heart heart = new Heart();// heart.beat();new Heart().beat();//匿名对象}}
使用
public class Demo01InnerClass {public static void amin(String[]args){Body body = new Body();//外部类的对象//通过外部类的对象,调用外部类的方法,里面间接在使用内部类Heartbody.methodBody();System.out.println("===========");//按照公式写;Body.Heart heart = new Body().new Heart();heart.beat();}
}
内部类的同名(重名)变量访问:
如果出现了重名现象,那么格式是:外部类名称.this.外部类成员变量名
public class Outer {int num = 10;//外部类的成员变量public class Inner /*extends Object*/{int num = 20;//内部类的成员变量public void methodInner(){int num = 30;//内部类方法的局部变量System.out.println(num);//局部变量,就近原则System.out.println(this.num);//内部类的成员变量System.out.println(Outer.this.num);//外部类的成员变量}}}
public class Demo02InnerClass {public static void main(String[]args){//外部类名称.内部类名称 对象名 = new外部类名称().new 内部类名称();Outer.Inner obj = new Outer(). new Inner();obj.methodInner();}
}
如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
“局部”:只是当前所属的方法才能使用它,出了这个方法外面就不能使用了。
定义格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称 {
//…
}
}
}
局部在方法里面,成员在方法外面。
小节一下类的权限修饰符:
public > protected > (default) > private
定义一个类的时候,权限修饰符规则;
1,外部类:public /(default) 这两种可以,其它不行
2,成员内部类:public /protected/(default)/private
3,局部内部类: 什么不能写。注意不是(default)
public class Outer {public void methodOuter(){class Inner{//局部内部变量int num = 10;public void methodInner(){System.out.println(num);//10}}Inner inner = new Inner();inner.methodInner();}
}
public class DemoMain {public static void main(String[]args){Outer obj = new Outer();obj.methodOuter();}
}
老王学java8周第一天相关推荐
- 老王学jsp之dom解析xml
xml是一种数据的存储方式,标签完全由用户自定义,是一种树状的结构,必须完全匹配,比如: <?xml version="1.0" encoding="GBK&quo ...
- 学python的基础-老司机学python篇:第一季(基础速过、机器学习入门)
本课程正在限时优惠中,请尽快购买 原价:¥350 优惠价:¥999.00 章节导航 课程大纲 第一章:python基础速过篇 开张课.我们直接开门见山,对着文档先把最基本的东西学一下.注意:关键看视频 ...
- 老王学linux-centos6.7drbd8.4.3
最下面有包 复制模块到内核中 cp drbd.ko /lib/modules/`uname-r`/kernel/lib/ depmod 更新内核包关联文件modules.dep ...
- 老王学linux-更改语言
一.修改/etc/sysconfig/i18n文件,如LANG="en_US",xwindow会显示英文界面,LANG="zh_CN.GB18030",xwin ...
- 跟着老王学python
正在学习python中,讲的确实不错,非常值得学习.需要的朋友可以参考:http://forum.ubuntu.org.cn/viewtopic.php?f=88&t=341507&v ...
- 老王学java之This()的用法
This指当前对象,this()则是指构造方法,this()表示无参构造方法,this(1.0)表示参数为一个浮点数的构造方法,以此类推 class Person{ // 定义Person类priva ...
- 老王学linux-ftp
FTP:File TransferProtocol 21/tcp: 文件共享服务:应用层,ftp NFS:Network File System (RPC: Remote Procedure Call ...
- 老王学linux-系统安全
原本的bash不是很强大排查问题不方便需要添加一些命令: /etc/bashrc HISTFILESIZE=4000 HISTSIZE=4000 HISTTIMEFORMAT='%F %T ' exp ...
- 【老王读Spring AOP-3】Spring AOP 执行 Pointcut 对应的 Advice 的过程
Spring AOP 执行 Pointcut 对应的 Advice 的过程 前言 版本约定 正文 jdk proxy 是如何执行 Pointcut 对应的 Advice 的? 获取 Advice 链的 ...
最新文章
- lvs中dr模式配置脚本
- Java多线程中的Runnable和Thread
- gp338信令_【对讲机的那点事】摩托罗拉GP338的MDC1200信令选呼如何编程?
- 要学会Python爬虫都需要什么基础呢?
- Linux下,sqlite简单实例
- iis php网站500错误原因_如何解决iis php 500错误问题
- 第67课 选择排序 改进例67.1 《小学生C++编程入门》
- sevlet中web.xml 文件
- Python之基础练习题
- 工具的使用——windows操作系统的使用(二)
- php修改sessiob时间_php中session过期时间设置
- Visual Studio 单元测试之六---UI界面测试
- Servlet请求和响应
- 一个简单的爬虫例子-天气
- vs2008简体中文正式版序列号和下载地址
- 华硕 ROG STRIX Z690-A GAMING WIFI D4 i7-13700K 黑苹果efi引导文件
- Hibernate第五篇【inverse、cascade属性详解】
- PS抠章、去水印-你懂得
- [Android相机]光线传感器识别环境光亮强度
- 2017北京世界食品博览会会刊(参展商名录)