Java内部类-思维导图

目录

一、内部类

0、前言

思维导图:

说明:

1、内部类概述

思维导图:

2、成员内部类

思维导图:

代码4.1:

代码4.2:

代码5.1:

3、局部内部类

思维导图:

4、静态内部类

思维导图:

5、匿名内部类

思维导图:

代码3.1:


一、内部类

0、前言

思维导图:

 

说明:

关于内部类还涉及一些其他问题,这里仅以四种内部类为依托进行展开,其他暂不讨论!

 

1、内部类概述

思维导图:

 

2、成员内部类

思维导图:

 

代码4.1:

package com.zibo.java.february.fourth;

public class Family { // 外部类
    // 外部类属性:人数
    private int number;

    public Family() {
    }

    public Family(int number) {
        this.number = number;
    }

    // 外部类方法:打印
    public void letPeopleSay(){
        // 原理:当外部类创建内部类对象的时候会隐式地将this对象传入构造方法内
        System.out.println(new People().say());
    }

    // 只有内部类可以声明为私有类(private)
    private class People{
        // 内部类属性:爱好
        private final String hobby = "读书";

        // 原理:内部类的构造方法隐式地含有一个传入外部类对象的参数,因此内部类可以直接使用外部类对象的数据

        // 内部类方法:说话
        public String say(){
            // 内部类既可以访问外部类数据(number)也可以访问内部数据(hobby)
            return "我家有" + number + "口人,我们都能工作!我们都喜欢" + hobby + "!";
        }
    }

    // 主方法用来运行程序
    public static void main(String[] args) {
        new Family(4).letPeopleSay(); // 我家有4口人,我们都能工作!我们都喜欢读书!
    }
}

 

代码4.2:

package com.zibo.java.february.fourth;

public class OuterClass {
    // 外部类变量a
    private int a = 10;

    // 内部类
    public class InnerClass{

        // 内部类变量a
        private int a = 20;

        public void getInt(){
            // 局部变量a
            int a = 30;
            System.out.println(a); // 30,局部变量就近原则
            System.out.println(this.a); // 20,内部类的成员变量
            System.out.println(OuterClass.this.a); // 10,外部类的成员变量
        }
    }
}

 

代码5.1:

package com.zibo.java.february.fourth;

public class OuterClass {
    // 外部类变量
    private String outerName;

    // 在外部类方法中创建对象
    public void printInnerClassName(){
        // 使用new关键字创建内部类对象
        InnerClass innerClass = new InnerClass();
        innerClass.setInnerName("内部类对象名字");
        System.out.println(innerClass.getInnerName());
    }

    public String getOuterName() {
        return outerName;
    }

    public void setOuterName(String outerName) {
        this.outerName = outerName;
    }

    // 内部类
    public class InnerClass{

        // 内部类变量a
        private String innerName;

        public String getInnerName() {
            return innerName;
        }

        public void setInnerName(String innerName) {
            this.innerName = innerName;
        }
    }
}

// 下面是测试类
package com.zibo.java.february.fourth;

// 测试类
public class Main {
    public static void main(String[] args) {
        // 使用外部类对象创建内部类对象
        OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
        innerClass.setInnerName("内部类对象名字");
        System.out.println(innerClass.getInnerName());
    }
}

 

3、局部内部类

思维导图:

 

4、静态内部类

思维导图:

 

5、匿名内部类

思维导图:

 

代码3.1:

package com.zibo.java.march.one;

public class Main {
    public static void main(String[] args) {
        String text = "外部类text";
        // 1、实现接口,创建一个”接口对象“;
        Name name = new Name(){
            // 可以有静态常量,必须创建时立即初始化
            static final int age = 24;
            static final String text = "内部类text";
            // 不可以有静态方法
            // 实现抽象方法
            @Override
            public String getName() {
                String text = "局部text";
                // 访问同名变量:只能就近访问
                // 如果存在局部同名变量,不能访问内部类或外部类的同名变量
                // 如果不存在局部同名变量,可以访问内部类或外部类的同名变量
                // 如果也不存在内部类同名变量,可直接访问外部类的同名变量
                return text; // 局部text
            }
        };
        System.out.println(name.getName()); // 匿名内部类名字
        // 2、继承抽象类,创建一类”抽象类对象“
        Age age = new Age() {
            @Override
            public int getAge() {
                return 10;
            }
        };
        System.out.println(age.getAge()); // 10
    }
}

// 接口
interface Name {
    String getName();
}

// 抽象类
abstract class Age{
    public abstract int getAge();
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值