Java基础(1)内部类

一.匿名对象和匿名对象类

堆中存放具体数据 栈中存放你所命名的变量名字
既然叫匿名函数 自然没有名字 所以这就是在堆里有具体数据 而栈中没有名字指向这个数据

A a = new A();
//1.a存放在栈上,new A()产生的对象在堆上
//2.a存放的是new出来的对象在堆内存中的地址
//3.是栈上的这个a是指向新new出来的对象的
//4.a是new出来的对象的引用。
//匿名对象:在堆上生成了对象,但是在栈上没有某个变量指向它。

在这里插入图片描述

二.内部类

1.成员内部类
可以访问外部类的所有成员变量和方法(无论静态、非静态)
自身没有静态成员
|–外部类里面创建成员内部类的实例:this.new Innerclass();
|–在外部类之外创建内部类的实例:new Outerclass().new Innerclass();
|–在内部类里访问外部类的成员:Outerclass.this.member
|–在内部类里访问内部类的成员:this.member
2.静态内部类
|–成员内部类没有静态成员;
|–静态内部类只能访问外围类的静态成员

OuterClass.InnerClass inner = new OuterClass.InnerClass();// 里面的类不用new

3.局部内部类(在方法体里面)
|-只能访问方法中定义的final类型的局部变量(初始化之后便不能更改)

4.匿名内部类(在方法体里面)

参考:https://www.cnblogs.com/tigerlion/p/11182838.html

5.接口作为方法的参数和返回值
作为参数

//测试类
public class Test{
    public static void main(String[] args) {
        Student s = new Student(); //改成多态调用:Smoking s = new Student();        
        smoking(s); //打印结果:Students are not allowed to smoke!
    }
 
    public static void smoking(Smoking s) { //接口作为参数。
        s.smoking();
    }
}

作为返回值,必须返回这个接口的一个实现类

//测试类
public class Test {
    public static void main(String[] args) {
        Smoking s = smoking(); //相当于Smoking s  = new Student();
        s.smoking(); //打印结果:Students are not allowed to smoke!
    }
 
    public static Smoking smoking() {
        return new Student();//返回接口实现类的对象。
    }
}

参考:https://blog.csdn.net/qq_41378597/article/details/95081122

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值