黑马程序员 内部类 Java

内部类:将一个类定义在另一个类里面,对里面那个类就叫做内部类(内置类,嵌套类)。

访问特点:内部类可以直接访问外部类中的成员,包括私有成员。而外部类要访问内部类中的成员必须要建立内部类的对象。

class Outer{

private int  x=3;

class Inner{

void function(){

function1();

System.out.println("内部类"+x);

}

}

void function1(){

System.out.println("外部类"+x);

}

}

public class innerclass {

public static void main (String [] args ){

Outer outer =new Outer();

//outer.function();//禁止直接访问内部类

outer.function1();//外部类只能访问自己的成员方法

Outer.Inner inner =new Outer().new Inner ();//需要指定内部类到底是谁的内部类才能建立内部类的对象

inner.function();

}

}

之所以可以直接访问外部类中的成员,都是因为内部类中持有了一个外部类的引用,格式 外部类名.this。

外部类要访问内部类,必须建立内部类对象

访问格式:1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象

格式:外部类名.内部类名 变量名=外部类对象.内部类对象;

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

2、当内部类在成员位置上,就可以被成员修饰符所修饰。

比如:private:将内部类封装在外部类中

Static:内部类就具备static的特性。

当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。

在外部其他类中,如何直接访问static内部类的非静态成员呢?

New Outer.inner().function();

在外部其他类中,如何直接访问static内部类中的静态成员呢?

Outer.inner.function();

注意:当内部类中定义了静态成员,该内部类必须是静态的。因为静态方法在编译的时候会在内存静态区中载入,如果内部类没有载入会发生异常。

当描述事物时,事务的内部还有事物,该事物用内部类来描述。

因为内部事务在使用外部事物的内容。

内部类在局部时,1、不可以被成员修饰符修饰

2、可以直接访问外部类中的成员,因为还持有外部类的引用。但是不可以访问它所在的局部中的变量,只能访问被final的局部变量

class Outer{

private int  x=3;

void method(){

final int  y=4;

class Inner1{

void function2(){

System.out.println("内部类"+x);

System.out.println("内部类"+y);

}

}

new Inner1().function2();

}

}

public class innerclass {

public static void main (String [] args ){

Outer outer =new Outer();

outer.method();

}

}

匿名内部类:

1、匿名内部类其实就是内部类的简写形式。

2、定义内部类的前提:

内部类必须是继承一个类或是实现接口。

3、匿名内部类的格式: new 父类或接口(){定义子类内容}

4、其实内部类就是一个匿名的子类对象,而且这个对象有点肥。 可以理解为带内容的对象

5、匿名内部类中定义的方法最好不要超过三个,否则调用起来不是很方便。

abstract class abs{

abstract void show();

}

public class innerclass {

//匿名内部类里面的函数的第一种调用形式

public static void main (String [] args ){

inner.function();

new abs(){

void show(){

System.out.println("匿名内部类");

}

}.show();

//匿名内部类里面的函数的第二种调用形式

abs ab=new abs(){

void show(){

System.out.println("匿名内部类1");

}

void show1(){

System.out.println("匿名内部类2");

}

};

ab.show();

//ab.show1();匿名内部类的第二种调用形式应用的是多态,父类没有的函数不能用这种形式调用

}

}

下面展示的是函数调用函数的代码,作为额外附赠,哇嘎嘎

class  Test12{

public static Test12 function(){//静态方法,返回值为Test12类型的对象

return new Test12();

}

public static void method(){

System.out.println("函数调用");//

}

}

public class InnerDemo {

public static void main(String[] args){

Test12.function().method();//调用方法,静态只能调用静态,非静态可以调用静态

}

}

多多指教,谢谢大家

黑马程序员 内部类 Java

时间: 2024-12-25 08:08:11

黑马程序员 内部类 Java的相关文章

黑马程序员-内部类、 抽象类、接口

java面向对象中比较重要的知识还有内部类,抽象类.接口,这些和封装.继承.多态一起赋予java强大的面向对象的能力 1.抽象类 在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类. 创建抽象类和抽象方法非常有用,因为他们可以使类的抽象性明确起来,并告诉用户和编译器打算怎样使用他们.抽象类还是有用的重构器,因为它们使我们可以很容易地将公共方法沿着

黑马程序员之Java多线程学习

android培训  java培训 期待与您交流! 这一篇文章主要关于java多线程,主要还是以例子来驱动的.因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,呵呵.大家可以去参考一些那些书籍.我这个文章主要关于实际的一些问题.同时也算是我以后复习的资料吧,.呵呵大家多多指教. 同时希望多结交一些技术上的朋友.谢谢. -------------------------------------------------------------------------------------

黑马程序员——【Java高新技术】——代理

一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理等等,如何去做? 解答:编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码. 2.代理原理图,如下: 3.代理的优点 如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类.还是代理类,这样以后很容易切换.例如,想要日志功能时就

黑马程序员之——Java基础 IO流——第四部分

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 第一讲:黑马程序员_毕向东_Java基础视频教程第21天-01-IO流(对象的序列化) 一,对象序列化的概念:将堆内存中的对象存入硬盘,保留对象中的数据,称之为对象的持久化(或序列化). 二,ObjectInputStream和ObjectOutputStream类的了解: ObjectInputStream  特有方法:public final Object  readObj

黑马程序员之——Java基础 IO流——第三部分

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 第一讲:黑马程序员_毕向东_Java基础视频教程第20天-01-IO流(File概述) 一,File 类的了解: 用于将文件或者文件夹封装成对象. 方便对文件与文件夹进行操作. File对象可作为参数传递给流对象的构造方法. File 类的声明:public class File extends Object implements Serializable, Comparabl

黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 2.泛型技术是给编译器使用的技术,用于编译时期,确保类型的安全. 3.泛型的擦除:运行时,会将泛型去掉,生成class文件中的是不带泛型的,这个称为“泛型的擦除”.擦除泛型的原因是为了兼容运行时的类加载器. 4.泛型的好处:(1)将运行时期出现的问题ClassCastException,转移到了编译时期.方便于程序员解决问题,让运行时期问题减少.安全.(2)避免了强制转换的麻烦. 5.泛

黑马程序员_ JAVA中的多线程

尽管线程对象的常用方法可以通过API文档来了解,但是有很多方法仅仅从API说明是无法详细了解的. 本来打算用一节的篇幅来把线程方法中一些重要的知识说完,但这样下来估计要很常的篇幅,可能要用好几节才能说把和线程方法相关的一些重要的知识说完. 首先我们接基础篇(二)来说明start()方法. 一个线程对象生成后,如果要产生一个执行的线程,就一定要调用它的start()方法.在介绍这个方法时不得不同时说明run方法.其实线程对 象的run方法完全是一个接口回调方法,它是你这个线程对象要完成的具体逻辑.

黑马程序员(Java)----面向对象(上)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面向对象 2.1了解面向对象 2.1.2 面向对象的概念 面向对象是相对面向过程而言,面向对象和面向过程都是一种思想.面向过程强调的是每一个功能的步骤,代表语言:C语言.面向对象强调的是对象,然后由对象去调用功能,代表语言:Java.C++.C#. 例子:把大象装进冰箱.用面向过程实现:1. 打开冰箱.2. 存储大象.3. 关上冰箱."打开"."存储"."

黑马程序员(Java)----面向对象(多态、抽象类、接口)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 3.7 多态 3.7.1.理解多态 多态可以理解为事物存在的多种体现形态.例如下面的代码: Cat c = new Cat(); Animal a = new Cat(); 建立一个猫的对象,可以用猫这个类引用,也可以用动物这个类引用. 3.7.2.多态的前提 1.类与类之间必须有关系,要么继承,要么实现. 2.存在覆盖.父类中有方法被子类重写(其实没有也是可以的,但是如果没有这个就没有意义)