首页 > 其他分享 >成员内部类

成员内部类

时间:2023-05-13 14:04:33浏览次数:28  
标签:部类 内部 成员 访问 new public

1. 内部类接上上

2. 成员内部类 419-420

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

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

成员内部类_内部类

2. 可以添加任意访问修饰符(public、 protected、默认、private),因为它的地位就是一个成员。

3.作用域和外部类的其他成员一样, 为整个类体比如前面案例,在外部类的成员方法中创建成员内部类对象,再调用方法。

4.成员内部类-访--- >外部类成员(比如:属性)访问方式:直接访问

5.外部类-- -----成员内部类(说明)访问方式创建对象, 再访问

6.外部其他类访---成员内部类

7.如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员) 去访问

代码在com.stulzl.member_innerclass01.包中

Member_InnerClass01 

package com.stulzl.member_innerclass01;

//成员内部类419-420
public class Member_InnerClass01 {
    public static void main(String[] args) {
        Outer08 outer08 = new Outer08();
        outer08.t1();

        //外部其他类访---成员内部类,外部其他类,使用成员内部类的两种方式
        //解读
        //第一种方式
        // outer08.new Inner08(); 相当于把 new Inner08()当做是 outer08 成员
        // 这就是一个语法,不要特别的纠结
        Outer08.Inner08 inner08 = outer08.new Inner08();
        inner08.say();

        // 第二方式 在外部类中,编写一个方法,可以返回 Inner08 对象
        Outer08.Inner08 inner08Instance = outer08.getInner08Instance();
        inner08Instance.say();

    }
}

class Outer08 { //外部类
    private int n1 = 10;
    public String name = "张三";

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

    //1.注意: 成员内部类,是定义在外部内的成员位置上
    //2.可以添加任意访问修饰符(public、protected 、默认、private),因为它的地位就是一个成员
    public class Inner08 {//成员内部类(因为它没卸载方法或者代码块中)
        private double sal = 99.8;
        private int n1 = 66;

        public void say() {
            //可以直接访问外部类的所有成员,包含私有的
            //成员内部类-访--- >外部类成员(比如:属性)访问方式:直接访问
            //如果成员内部类的成员和外部类的成员重名,会遵守就近原则.
            // ,可以通过 外部类名.this.属性 来访问外部类的成员
            System.out.println("n1 = " + n1 + " name = " + name
                    + " 外部类的 n1=" + Outer08.this.n1);
            hi();
        }
    }

    //写一个方法,调用成员内部类
    //外部类-- -----成员内部类(说明)访问方式创建对象,再访问
    public void t1(){
        //使用成员内部类
        //创建成员内部类的对象,然后使用相关的方法
        Inner08 inner08 = new Inner08();
        inner08.say();
        System.out.println(inner08.sal);
    }

    //方法,返回一个 Inner08 实例
    public Inner08 getInner08Instance(){
        return new Inner08();
    }
}

3. 静态内部类 421-422

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

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

2.可以添加任意访问修饰符(public、protected、默认、private),因为它的地位就是一个成员。

3.作用域:同其他的成员,为整个类体

4. 静态内部类-- -访问---->外部类(比如:静态属性[访向方式直接访问所有静态成员]

5. 外部类-- -访问-----静态内部类访问方式:创建对象,再访问

6.外部其他类---访向---->静态内部类

7.如果外部类和静态内部类的成员重名时,静态内部类访问的时,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.成员) 去访问

代码在com.stulzl.static_innerclass01.包中

Static_InnerClass01

package com.stulzl.static_innerclass01;

//静态内部类421-422
public class Static_InnerClass01 {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.m1();

        //外部其他类---访向---->静态内部类 外部其他类 使用静态内部类
        //方式 1
        //因为静态内部类,是可以通过类名直接访问(前提是满足访问权限)
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();

        //方式 2
        //编写一个方法,可以返回静态内部类的对象实例
        Outer10.Inner10 inner = outer10.getInner();
        inner.say();

        System.out.println("============");

        //静态的
        Outer10.Inner10 inner_ = Outer10.getInner_();
        inner_.say();
    }
}
class Outer10 { //外部类
    private int n1 = 10;
    private static String name = "张三";//静态的
    private static void cry(){}
    //Inner10 就是静态内部类
    //1. 放在外部类的成员位置
    //2. 使用 static 修饰
    //4. 可以添加任意访问修饰符(public、protected 、默认、private),因为它的地位就是一个成员
    //5. 作用域 :同其他的成员,为整个类体
    static class Inner10{
        private static String name = "中国";
        public void say(){
            //3. 可以直接访问外部类的所有静态成员,包含私有的,但不能直接访问非静态成员
            System.out.println(name);
            cry();//静态内部类---访问---->外部类(比如:静态属性[访向方式直接访问所有静态成员]

            //如果外部类和静态内部类的成员重名时,静态内部类访问的时,默认遵循就近原则,
            // 如果想访问外部类的成员,则可以使用(外部类名.成员) 去访问
            System.out.println(name+" 外部类name="+Outer10.name);

        }
    }

    //5. 作用域 :同其他的成员,为整个类体
    // 外部其他类---访向---->静态内部类:创建对象,再访问
    public void m1(){
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    //编写一个方法,返回new Inner10()实例
    public Inner10 getInner(){
        return new Inner10();
    }

    ////编写一个静态方法,返回new Inner10()实例
    public static Inner10 getInner_(){
        return new Inner10();
    }
}

4. 内部类练习

4.1判断输出  423

代码在com.stulzl.innerclass01_exercise01.包中

InnerClass_Exercise01 

package com.stulzl.innerclass01_exercise01;

//练习 判断输出423
public class InnerClass_Exercise01 {
    public static void main(String[] args) {
        Test t = new Test();//5
        Test.Inner inner = t.new Inner();//这里是外部其他类,调用成员内部类
        System.out.println(inner.a);//5
    }
}
class Test {//外部类
    public Test() {//构造器
        Inner s1 = new Inner();//这里new一个成员内部类实例
        s1.a = 10;//调用a变成10
        Inner s2 = new Inner();//这里又new一个新的成员内部类实例,和前面那个实例没关系
        System.out.println(s2.a);//5
    }

    class Inner { //内部类,成员内部类
        public int a = 5;
    }
}

标签:部类,内部,成员,访问,new,public
From: https://blog.51cto.com/u_15784725/6273680

相关文章

  • java中this的内存原理以及成员变量和局部变量
    this的内存原理1、this的作用:区分局部变量和成员变量eg:publicclassStudent{ privateintage; publicvoidmethod(){ intage=10; System.out.println(age);//10 System.out.println(this.age);//0使用this.可以直接使用成员变量的age }}2、this的本质:代......
  • 终于找到了C++成员函数做函数指针的完美解决办法
    当然,这是转自别人的:https://www.codenong.com/19808054/之前因为这个没少废精力啊,这里记一下,感谢外国友人的回答.1#include<iostream>2#include<functional>3#include<string>4#include<sstream>5#include<memory>67usingnamespacestd;89......
  • 绩效最低的团队成员自我评价
    第一阶段大部分都是他俩主写的,他们负责达梦数据库的连接,负责管理系统和用户系统的编写,我只是负责一些页面的编写,所以我就是那个干活最少的,自然而然我来写这篇博客。我第一阶段总结来说就是没干什么活。下阶段目标:我觉得他们那个用户管理系统写的不太出彩,我打算自己重做管理系统......
  • 信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含
    信捷PLC程序,八轴程序,有伺服也有步进,内部有伺服和步进计算公式换算,模块化编程框架,包含各功能区规划,伺服步进电机DOG+JOG,气缸手动,公式计算数据处理,报警功能区,自动步进S调用等。研究透彻应用此思维,完全能应用上手中大型各日系主流系统,如日本三菱,松下,欧姆龙,基恩士,国内主流信捷,汇川,台......
  • 记录开发第一个Servlet时部署tomcat出现HTTP状态 500 - 内部服务器错误问题 (已解决)
    经历了漫长的deBug过程,我搜索到的文章的报错原因都不相同,希望本片文章能够帮到你,创作不易,点个赞再走吧! 我的报错: 后来发现自己编译后只产生了class文件,没有产生包,于是在dos窗口改变了编译方式: 1javac-d.*.java 这个方法使得 打包编译时自动创建包目录,不需要自己新......
  • Java---内部类
    Java---内部类内部类的概念内部类就是一个类内部包含另一个类分类:成员内部类局部内部类(包含匿名内部类)格式:修饰符class外部类名称{修饰符class内部类名称{//}}注意:内用外,随意访问;外用内,需要内部类对象.代码示例publicclassBody{privateSt......
  • 统计类内成员函数调用次数(mutable 的一种用法)
    #include<iostream>classStudent{public:Student(conststd::string&name_,unsignedage_);~Student(){}voidoutput()const{std::cout<<this->name<<""<<this->age<<std::en......
  • 无根容器内部结构浅析
    随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器。本文介绍了无根容器的内部结构,并分析了无根容器网络组件中的漏洞。随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器。无根容器是不需要root即可创建得......
  • 类的成员:方法(method)(三)
    形参和实参形参(formalparameter):在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。实参(actualparameter):在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。参数传递机制:值传递Java里方法的参数传递方式只有一种:值传递。即将实际参......
  • 类的成员:方法(method)(二)
    方法的重载(overload)概念及特点方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。         参数列表不同,意味着参数个数或参数类型的不同重载的特点:与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型......