Java基础学习之内部类

内部类:把类定义在其他类的内部,这个类就被称为内部类

class Outer{

class Inner{

}

}

内部类的特点:

1.内部类可以访问外部类的成员,包括私有成员。

class Outer{

privateintnumber
= 20;

class Inner{

publicvoid show(){

System.out.println(number);

}

}

}

2.外部类想要访问内部类,必须要先创建对象

class Outer{

privateintnumber
= 20;

class Inner{

publicvoid show(){

System.out.println(number);

}

}

publicvoid metod(){

Innerinner =
newInner();

inner.show();

}

}

内部类根据定义的位置不同,分为两种

1.      成员内部类:定义在成员位置的内部类

2.      局部内部类:定义在方法内部的内部类。

class Outer{

privateintnumber=
20;

class Inner{

publicvoid show(){

System.out.println(number);

}

}

publicvoidmetod(){

Inner inner =
new Inner();

inner.show();

}

publicvoidtest(){

class InnerDemo2{

publicvoid show(){

System.out.println(number);

}

}

InnerDemo2 innerd =
new InnerDemo2();

innerd.show();

}

}

成员内部类在其他类中的访问方式:

成员内部类相当于外部类的一个成员变量

访问格式  外部类.内部类 对象名 = new 外部类().new 内部类();

Outer.Inner out =
new Outer().new
Inner();

out.show();

成员内部类的修饰符:

private   不能被外界访问 。一般是外部类提供一个方法给其他类来访问私有内部类

static     只能访问外部类的静态成员,其内部的方法都是被静态修饰后的方法 访问格式  外部类.内部类   对象名 = new 外部类.内部类();

class Outer{

privatestaticintnumber = 20;

staticclass
Inner{

publicvoid show(){

System.out.println(number);

}

}

}

publicclass InnerDemo {

publicstaticvoid main(String[] args) {

Outer.Inner inner = new
Outer.Inner();

inner.show();

}

}

默认修饰符  成员内部类相当于外部类的一个成员变量

访问格式  外部类.内部类 对象名 = new 外部类().new 内部类();

Outer.Inner out =
new Outer().new
Inner();

out.show();

public   修饰的内部类,访问时,必须先创建外部类对象,通过外部类对象去获取内部类的引用

class Outer{

privatestaticintnumber = 20;

public 
class Inner{

publicvoid show(){

System.out.println(number);

}

}

}

publicclass InnerDemo {

publicstaticvoid main(String[] args) {

Outer outer=new Outer();

Outer.Inner
inner =outer.newInner();

}

}

static 不能与private同时出现。

可以在this前加外部类来限定,表示当前代表的是外部类的对象。

局部位置的内部类:局部内部类不能使用public修饰    局部内部类也不能用static修饰

可以直接访问外部类的成员

在局部位置可以创建内部类的对象,通过内部类的对象来局部调用内部类的方法。

局部内部类访问局部变量时,该局部变量必须是用final修饰的

因为局部变量会随着方法的调用完毕而消失,但是局部对象并没有立刻从堆内存中消失,还要使用那个变量。为了让数据能够继续使用,就用final修饰,这样,在堆内存中存储的其实是一个常量值(数值,变量会消失,但是数字仍在)。

局部内部类不能被外界所访问。

匿名内部类:就是内部类的简写。

匿名内部类必须继承某个或者是实现没有个接口。

格式:new 父类名或者接口名{ 重写方法}

匿名内部类调用自己的方法的格式:new 父类名或者接口名{ 重写方法}.方法名();

匿名内部类一般只实现一个方法,因为多余的方法无法调用。

匿名内部类其实就是一个子类对象。

每一次创建匿名内部类,都是一个新的对象。

匿名内部类可以按照多态的方式赋值给接口或者是父类,来完成多个方法的调用。

匿名内部类本质上就是继承类或者实现了接口的子类的匿名对象。

匿名内部类的好处:用完即销毁,内存能够及时回收。

interface Inner{

void show();

}

class Outer{

publicstatic
Inner method(){

returnnew
Inner() {

publicvoid show() {

//
TODO Auto-generatedmethod stub

System.out.println("helloworld");

}

};

}

}

publicclass InnerTest {

publicstaticvoid
main(String[] args) {

//
TODO Auto-generatedmethod stub

Outer.method().show();

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 02:30:33

Java基础学习之内部类的相关文章

java基础学习总结——GUI编程(二)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class TestActionEvent { 7 public static void main(String args[]) { 8 Frame f = new Frame("

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

JAVA基础学习笔记(2)

看了几天的视频了,都没时间来写下学习笔记,今天来写下第二次的学习笔记,前几天看的给忘记了,就写最新看到的吧 主要内容:1.类的变量与函数(方法) 2.对象的存储方式 3.新建一个对象及对象的赋值与调用 4.空对象 5.匿名对象 1.类的变量与函数(方法) class Dog      //类名 { String name;  //变量的声明 int age; String color; void bark()   //方法的定义(返回值为空,不带参数) { System.out.println(

Java基础学习--抽象类与抽象函数

Java基础学习--抽象类与抽象函数 abstract class 抽象类不能制造对象,但是可以定义变量,赋给这个变量的一定是他非抽象子类的对象: 抽象类中的抽象函数没有函数体,例如:public abstract void move(); 一个抽象类可以没有任何抽象方法,所有的方法都有方法体,但是整个类是抽象的. 抽象类中所有的的抽象函数必需子类的覆盖,而非抽象函数不需要覆盖.因为子类会继承父类的函数,如果不去覆盖继承来的抽象函数,那么子类就含有抽象函数,含有抽象函数的类必须要声明为抽象类.

JAVA基础学习笔记(1)

今天第一天开始学JAVA,时间:2014年6月17日 学习内容:1.java环境的架设 2.JAVA基本数据类型 1.JAVA环境的架设       1.要先去下载JDK,下载地址 2.安装完成后,设置环境变量 1.1环境变量的设置        1.右键-我的电脑-属性-高级-环境变量-系统变量,找到PATH,在里面加入jdk里bin目录的地址 如:c:\java\bin; 2.新建-名为classpath,值为. 1.2测试JAVA是否配置正确        1.在cmd里面输入javac.

Java基础学习总结——Java对象的序列化和反序列化

一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网络上传送对象的字节序列. 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存.比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些s

java基础学习笔记day01

java基础学习笔记day01 1.软件开发: 软件:按照特定顺序组织的计算机数据和指令的集合 开发:软件的制作过程 软件开发:借助开发工具和计算机语言制作软件 2.java概述: java之父:詹姆斯·高斯林 JDK:java开发环境 jre:java运行环境 JVM:java虚拟机 java跨平台是因为,JVM能在不同的平台运行,JVM是跨平台的 JavaSE:标准版 JavaME:手机端,物联网 JavaEE:企业版,互联网项目 3.java语言特点: 简单性 解释性 面向对象 高性能 分

Java基础学习1-Java标识符及基本类型

暑假闲来无事,重新学习Java,希望能够加深自己对Java的理解与深入. 第一天,从Java标识符开始. Java标识符的命名规则 - 标识符必须以字母.下划线.美元符$开头. - 标识符其它部分可以是字母.下划线.美元符$和数字的任意组合. - Java标识符的大小写敏感,无长度限制(但是也不要太长,会变成裹脚布的(/ □ \)). - 不可以是Java的关键字(这点只要是有点基础的都会知道啦,Java的关键字还挺多的哦,小心踩到地雷呀). 下面是一个小栗子. /* *测试标识符的写法 */

转载:java基础学习总结——java读取properties文件总结

java基础学习总结--java读取properties文件总结 一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径的写法,测试项目如下: 1.1.项目的