详解《实例内部类》《静态内部类》

本文详细介绍了Java中的实例内部类和静态内部类。实例内部类可以直接访问外部类的非静态成员,而静态内部类则需要通过外部类实例来访问。静态内部类可以拥有静态变量和方法,而实例内部类则不能。文章通过实例展示了如何实例化这两种内部类,并讨论了它们访问外部类成员的规则。
摘要由CSDN通过智能技术生成

1.0实例内部类

1.1实例内部类和外部类相同的变量怎么访问?
class OuterClass{
    public int date1=1;


    class InnerClass{
        public int date1=11;
        public void test(){
            System.out.println(" 内部类普通方法!!");
 //访问的是内部的date1,因为如果内外都有的话,会优先访问局部的
            System.out.println(date1);
 //我们可以通过 外部类类名.this.外部类成员变量(OuterClass.this.date1)
             System.out.println(OuterClass.this.date1);
        }
    }
}
1.2如何实例化实例内部类?
public class Test {
    public static void main(String[] args) {
 //我们可以通过 实例外部类类名.实例内部类类名 引用变量=实例外部类对象.实例内部类对象
        OuterClass.InnerClass innerClass=new OuterClass().new InnerClass();
        innerClass.test();//通过引用来访问实例内部类对象
    }
}
1.3实例内部类不能有静态变量??
class InnerClass{
        public static int date2=2;//会报错
    
        public static final int date2=2;//如果要加静态变量需要加final 来修饰
    
}

注意:实例内部类不能有静态方法

1.0静态内部类

静态内部类与实例内部类不一样的地方是静态内部类可以实现静态方法和静态变量

class OuterClass{
    public int date1=1;
    public int date2=2;
    public int date3=3;

    /**
     * 被static修饰的内部类被称为静态内部类
     */
   static class InnerClass{
        public int date4=4;
        public int date5=5;

        public InnerClass() {
            System.out.println(" 静态内部类的构造方法!!");
        }

        public void test(){
            System.out.println("这是一个普通方法!!");
        }

        
        }
}
1.1静态内部类里面不能直接访问非静态数据成员??
class OuterClass{
    public int date1=1;
    public int date2=2;
    public int date3=3;

    /**
     * 被static修饰的内部类被称为静态内部类
     */
   static class InnerClass{//在编译的时候就生成了,所以我们要间接访问外部类数据
        public int date4=4;
        public int date5=5;

        public InnerClass() {
            System.out.println(" 静态内部类的构造方法!!");
        }

        public void test(){
            OuterClass outerClass=new OuterClass();//我们可以创建一个对象间接访问
            System.out.println("这是一个普通方法!!");
            System.out.println(date4);不能直接访问非静态数据
            System.out.println(date5);
            System.out.println(outerClass.date1);//用外部类引用来间接访问外部类数据
            System.out.println(outerClass.date2);
            System.out.println(outerClass.date3);
         
        }

        
        }
}
1.2静态内部类怎么实例化?
public class Test {
    public static void main(String[] args) {
        //外部类类名.静态内部类类名 引用变量=new.外部类类类名.静态内部类对象
        OuterClass.InnerClass innerClass=new OuterClass.InnerClass();

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值