(JAVA) 四种内部类的细节理解,文字+代码会更好理解----第三部分重点_out 和inner (1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

    AA aa = new AA();
    aa.t1();

    //外部类使用成员内部类的第二种方式
   
    AA.BB b2 = aa.retu();
    //解析:
    //AA.BB 是外部类AA中的内部类BB
    //aa.retu() 等价于 aa.new BB()

    //直接调用内部类的play()方法
    b2.play();


}

}
class AA{
private int n1 = 10;
public String name = “sminth”;

//定义成员内部类
class BB{
    public void play(){
        System.out.println("n1=" + n1 + " name=" + name);
    }
}

//第二种:
//定义一个外部成员方法tetu(),返回值为 内部类对象类型
public BB retu(){
    return new BB(); //返回 内部类的new BB() 对象
}

}




二、静态内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

1、什么是静态内部类

静态类部类是定义在外部类的成员位置,与成员内部类相似。但是静态内部类有static 关键字修饰,并且静态内部类只能访问外部类的静态成员。

2、静态内部类与成员类部类的区别

生成(new)一个静态内部类不需要外部类成员,静态内部类的对象可以直接生成,如:
                Outer.Inner in=new Outer.Inner();

而不需要通过生成外部类对象来生成,并且可以定义私有静态内部类。


Ⅱ使用细节 ☛♡☚

1、可以直接访问外部类的所有静态成员,包含私有,但是不能直接访问非静态成员。

2、可以添加任意访问修饰符(public、protected、默认、private),因为成员内部类就相当于一个成员。和成员内部类一样。

3、静态内部类能定义静态成员,也能定义普通成员或非静态成员。

4、当静态内部类和外部类有同名的成员时,静态内部类可通过 外部类名.变量名 访问外部类成员。


Ⅲ代码实例演示 ☛♡☚

㈠ 其他外部类的第一种访问方式

package com.Locally;

public class static_inner {
    public static void main(String[] args) {

        //new 一个外部类Outer01 对象
        Outer01 outer01 = new Outer01();

        //外部类的第一种访问方式:直接访问静态内部类成员
        Outer01.Inner01 inner01 = new Outer01.Inner01();
        //解析:
        //Outer01.Inner01可以理解为创建外部类对象Outer01的内部类对象Inner01
        //Outer01.Inner01() 因为是静态的,所以直接访问

        //通过对象名,直接调用静态内部类成员
        inner01.cc();

        
    }
}
class Outer01{

    private static int n3 = 10;

    public void cpy(){
        System.out.println("这是cpy()方法");
    }
    
    //定义静态内部类
    static class Inner01{

        private int n2 = 33;
        
        public void cc(){
            System.out.println("n3=" + n3);

            //不能访问cpy(),因为它是普通成员,没有static 关键字修饰
        }
    }

    
}

㈡ 其他外部类的第二种访问方式

package com.Locally;

public class static_inner {
    public static void main(String[] args) {
        //定义外部类对象
        Outer01 outer01 = new Outer01();
        

        //其他外部类的第二种访问方式:
        //创建一个方法访问
        Outer01.Inner01 inner011 = outer01.n();
        //解析:
        //Outer01.Inner01 同上
        //outer01.n() 等价于 new Outer01.Inner01()

        //通过对象名直接访问静态内部类的成员
        inner011.cc();
    }
}
class Outer01{
    private static int n3 = 10;
    public void cpy(){
        System.out.println("这是cpy()方法");
    }
    
    //定义静态内部类
    static class Inner01{

        private int n2 = 33;

        public void cc(){
            System.out.println("n3=" + n3);
            
        }
    }

    //创建的方法
    //定义一个方法,返回值类型为 静态内部类对象
    public Inner01 n(){
        return new Inner01(); //返回 new了的静态内部类对象
    }
}

三、局部内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

**什么是局部内部类:**定义在一个类的成员方法或代码块中的类叫局部内部类。

代码解释:

class Outer{//外部类
    
    private int n1; //外部类属性
    public void m2(){} //外部类方法

    //外部类方法
    public void m1(){

        //方法中
        //局部内部类
        final class Inner{ //类名
            
            private int n1; //局部内部类属性

            public void f1(){ //局部内部类方法}
        }
    }

}

Ⅱ使用细节 ☛♡☚

1、局部内部类是定义在外部类的局部位置,通常在方法

2、可以直接访问外部类的所有成员,包含私有的

3、不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能其他使用修饰符的,但是可以使用 final 修饰。

4、作用域 : 仅仅在定义它的方法或代码块中

5、 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名去访问

6、外部类名.this 的本质就是外部类的对象


Ⅲ代码实例演示 ☛♡☚

package com.Locally;

public class locally {
    public static void main(String[] args) {
        
        //new 一个外部类对象
        Outer outer = new Outer();
        outer.m1();
    }
}

class Outer{
    
    private int n1 = 100;

    public void m2(){
        System.out.println("Outer m2()");
    }

    public void m1(){
        
        //局部内部类
        final class Inner{

            private int n1 = 800;
            public void f1(){

                //  Outer02.this 本质就是外部类的对象,使用 外部类名.this.成员 去访问
                System.out.println("n1= " + n1 + " Outer.this.n1=" + Outer.this.n1);
                
                调用外部类的m2()方法
                m2();
            }
        }

        //new 一个局部内部类对象
        Inner inner = new Inner();
        //调用局部内部类的方法
        inner.f1();
    }

}

四、匿名内部类 ☞♥☜

Ⅰ基本介绍 ☛♡☚

什么是匿名内部类:

匿名内部类,其实就是匿名的子类而已,只不过它隐藏在.class文件里面你看不到,所以叫匿名内部类!

注意:

匿名内部类既是一个类的定义,同时它本身也是一个对象,因此从语法上看,它既有定义类的特征,也有创建对象的的特征。


Ⅱ使用细节 ☛♡☚

1、可以直接访问外部类的所有成员,包含私有的

2、不能添加访问修饰符,因为它的地位就是一个局部变量

3、作用域 : 仅仅在定义它的方法或代码块中

4、如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员名去访问


Ⅲ代码实例演示 ☛♡☚

package com.Locally;

public class Anonymous {
    public static void main(String[] args) {

        //new 一个Cellphone的对象
        Cellphone cellphone = new Cellphone();
        
        //匿名内部类
        cellphone.alarmclock(new Bell(){
            @Override
            public void ring() {
                System.out.println("System.out.println(\"懒猪起床了.....\");");
            }
        });

    }
}

//接口
interface Bell{
    void ring();
}

//定义一个类
class Cellphone{
    
    public void alarmclock(Bell bell){//传一个接口类的参数
        bell.ring();//动态绑定
    }

}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

ellphone{

public void alarmclock(Bell bell){//传一个接口类的参数
    bell.ring();//动态绑定
}

}


[外链图片转存中…(img-zI5hzgy8-1715892371837)]
[外链图片转存中…(img-J8Wcfyh3-1715892371838)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值