Java——内部类

简介: Java——内部类

一、内部类

1.1、内部类概念
就是将一个类定义在另一个类的内部,内部的类简称内部类

public class Outer{

class Inner{
    
}

}

1.2、内部类特点
内部类可以很好的实现隐藏,可以使用protected private修饰符
内部类可以直接访问外部类的所有成员,包括私有的成员
外部类不能直接访问内部类的成员,必须首先建立内部类的对象才能访问
//外部类访问内部类
void visitInner(){

Inner ii = new Inner();
ii.data = 90;
System.out.println("内部类的data=" + ii.data);

}

//主函数
Outter o = new Outter();
o.visitInner();

/*
内部类的data=90
*/

//外部类访问内部类,外部类
void initInner(int data){

iii = new Inner();
iii.data = data;

}

void visitInner(){

System.out.println("内部类的data=" + iii.data);

}
Inner iii;

//主函数
Outter o = new Outter();
o.initInner(30);
o.visitInner();

1.3、成员内部类及应用
成员内部类属于外部类的实例成员,成员内部类可以有public private default protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.成员属性”的形式
创建成员内部类的实例使用“外部类名.内部类名 实例 = 外部类实例名.new 内部类构造方法(参数)”的形式
class Outter{

int data;
public void Outprint(){
    System.out.println("外部类");
}

class Inner{
    int data;
    void Innerprint(){
        System.out.println("内部类");
        //内部类访问外部类,外部类名.this.成员方法”和“外部类名.this.成员属性
        Outter.this.Outprint();
        System.out.println("外部类data=" + Outter.this.data);
    }
}

}

public class Test {

public static void main(String[] args) {    
    //实例化内部类,外部类名.内部类名 实例 = 外部类实例名.new 内部类构造方法(参数)
    Outter o = new Outter();
    o.data = 110;
    Outter.Inner i = o.new Inner();
    i.Innerprint();                    //使用内部类方法
        
}

}

/*
内部类
外部类
外部类data=110
*/

二、匿名内部类

通常用在:线程、安卓按键响应

匿名内部类是没有名称的内部类,没办法引用它们。必须在创建时,作为new语句的一部分来声明并创建它们的实例
匿名内部类必须继承一个类(抽象的,非抽象的都可以)或者实现一个接口,所有父类(或父接口)是抽象类,则匿名内部类必须实现其所有抽象方法
语法:实例
newinterface/superclass(){类体}
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例

三、代码演示

内部类完整代码

class Outter{

int data;
public void Outprint(){
    System.out.println("外部类");
}

void initInner(int data){
    iii = new Inner();
    iii.data = data;
}

void visitInner(){

// Inner ii = new Inner();
// ii.data = 90;

    System.out.println("内部类的data=" + iii.data);
}

class Inner{
    int data;
    void Innerprint(){
        System.out.println("内部类");
        //内部类访问外部类,外部类名.this.成员方法”和“外部类名.this.成员属性
        Outter.this.Outprint();
        System.out.println("外部类data=" + Outter.this.data);
    }
}
Inner iii;

}

public class Test {

public static void main(String[] args) {    
    //实例化内部类,外部类名.内部类名 实例 = 外部类实例名.new 内部类构造方法(参数)
    Outter o = new Outter();
    o.initInner(30);
    o.visitInner();
    o.data = 110;
    Outter.Inner i = o.new Inner();
    i.Innerprint();                    //使用内部类方法        
}

}

/*
内部类的data=30
内部类
外部类
外部类data=110
*/

匿名内部类完整代码

abstract class Demo1{

abstract void printInfo();

}

interface Demo2{

abstract void interprint();

}

public class Test {

public static void main(String[] args) {    
    new Demo1(){
        void printInfo() {
            // TODO Auto-generated method stub
            System.out.println("这不是demo1,而是匿名内部类的方法");
        }    
    }.printInfo();    //可以直接.使用,或者使用多态的用法
    
    //多态用法
    Demo1 d = new Demo1(){
        void printInfo() {
            // TODO Auto-generated method stub
            System.out.println("这不是demo1,而是匿名内部类的方法");
        }    
    };
    d.printInfo();
    
    new Demo2(){
        public void interprint() {
            // TODO Auto-generated method stub
            System.out.println("这不是接口的实例,而是匿名内部类的方法");
        }    
    }.interprint();
    
}

}

/*
这不是demo1,而是匿名内部类的方法
这不是demo1,而是匿名内部类的方法
这不是接口的实例,而是匿名内部类的方法
*/

目录
相关文章
|
1月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
1月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
28 5
|
2月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
31 6
|
1月前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
3月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
42 2
|
3月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
3月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
22 2
|
4月前
|
Java 程序员
Java的内部类与匿名类的技术性文章
Java的内部类与匿名类的技术性文章
34 1
|
3月前
|
Java
Java内部类相关内容总结和解读
Java内部类相关内容总结和解读
25 0
|
3月前
|
存储 Java
Java 五种内部类演示及底层原理详解
Java 五种内部类演示及底层原理详解
24 0