内部类(三)

内部类(三),第1张

部类(三) 内部类 成员内部类的使用

说明:成员内部类是定义在外部类的成员位置,并且没有static修饰。(其本质就是类的一个成员)

    可以直接访问外部类的所有成员,包含私有的。可以添加任意访问修饰符(public、proctected、默认、private),因为他的地位就是一个成员。作用域和外部类的其他成员一样,为整个类体。成员内部类访问外部类(如:属性)[访问方式:直接访问]。外部类访问成员内部类[访问方式:创建对象,再访问]。外部其他类访问成员内部类。
    //外部其他类使用成员内部类的两种方法
      Outer08 outer08 = new Outer08();
    //方法一
      Outer08.Inner08 inner08 = outer08.new Inner08();
    //方法二
      Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
    
    
    如果外部类和成员内部类重名时,内部类访问的话,默认就近原则,如果想访问外部类的成员,则可以使用(外部类.this.成员)去访问。

例:

package com.z.innerclass;

public class MemberInnerClass {
    public static void main(String[] args) {
        Outer08 outer08 = new Outer08();
        outer08.t1();

        //外部其他类使用成员内部类的两种方法
        //方法一
        Outer08.Inner08 inner08 = outer08.new Inner08();
        //方法二
        Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
    }
}
class Outer08{
    private int n1 = 2;
    public String name = "张三";

    private void hi(){
        System.out.println("hi()方法...");
    }

    public class Inner08{
        private double sal = 1.1;
        public void say(){
            System.out.println("n1 = " + n1 + " name = " + name);
            hi();
        }
    }
    public Inner08 getInner08Instance(){
        return new Inner08();
    }
    public void t1(){
        //使用成员内部类
        Inner08 inner08 = new Inner08();
        inner08.say();
        System.out.println(inner08.sal);
    }

}

输出

n1 = 2 name = 张三
hi()方法...
1.1

静态内部类的使用

说明:成员内部类是定义在外部类的成员位置,并且有static修饰。

    可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员。可以添加任意访问修饰符(public、proctected、默认、private),因为他的地位就是一个成员。作用域:同其他成员一样,为整个类体。静态内部类访问外部类(如:静态属性)[访问方式:直接访问所有静态成员]。外部类访问静态内部类[访问方式:创建对象,再访问]。外部其他类访问静态内部类
    //外部其他类访问静态内部类
            //方法一
            //因为静态内部类,是可以通过类名直接访问(前提是满足访问权限)
            Outer10.Inner10 inner10 = new Outer10.Inner10();
            //方法二
            //编写一个方法,可以返回静态内部类的实例化对象
            Outer10 outer10 = new Outer10();
            Outer10.Inner10 inner101 = outer10.getInner10();//getInner10()为非静态方法
    
            Outer10.Inner10 inner10_ = Outer10.getInner10_();//getInner_()为静态方法
            
    
    如果外部类和静态内部类重名时,内部类访问的话,默认就近原则,如果想访问外部类的成员,则可以使用(外部类.this.成员)去访问。
package com.z.innerclass;

public class StaticInnerClass01 {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.m1();
        //外部其他类访问静态内部类
        //方法一
        //因为静态内部类,是可以通过类名直接访问(前提是满足访问权限)
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();
        //方法二
        //编写一个方法,可以返回静态内部类的实例化对象
        Outer10.Inner10 inner101 = outer10.getInner10();
        System.out.println("==============");
        inner101.say();

        Outer10.Inner10 inner10_ = Outer10.getInner10_();
        System.out.println("------------");
        inner10_.say();
    }
}
class Outer10{
    private int n1 = 10;
    private static String name = "张三";
    private static void cry(){}
    public static class Inner10{
        public void say(){
            //System.out.println(n1);  错误
            System.out.println(name);
            cry();
        }
    }
    public Inner10 getInner10(){
        return new Inner10();
    }
    public static Inner10 getInner10_(){
        return new Inner10();
    }
    public void m1(){
        Inner10 inner10 = new Inner10();
        inner10.say();
    }
}

输出:

张三
张三
==============
张三
------------
张三

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713046.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存