Java的内部类实例分析

2023-05-16 0 2,544

部类

其实内部类顾名思义,就是类中类,一个里面还有一个类。

内部类分为四种

1.普通内部类

2.静态内部类

3.方法内部类

4.匿名内部类

我们一一去了解一下~~

A、普通内部类:

我们先通过代码去了解一下:

package InternalClass;
/**
 * 内部类
 */
public class Car {
    public int a = 10;
    public int b = 20;
    //外部类的方法
    public void method() {
        System.out.println("我是外部类Car的普通方法!");
        bus b = new bus();     //创建内部类的对象
        b.internalMethod();
    }
    //内部类(在Car类中的bus类)
    public class bus {
        int b = 30;
        //内部类方法
        public void internalMethod() {
            System.out.println("**这是bus内部类的普通方法!");
            System.out.println("**我是内部类,现在在访问外部类Car的a:" + a);
            System.out.println("**我是内部类,现在在访问内部类bus的b:" + this.b);
            System.out.println("**我是内部类,现在在访问外部类bus的b:" + Car.this.b);
            //注意,如果在内部类需要使用外部类的属性,必须通过外部的类去this外部类的属性
        }
    }    
	//程序运行入口:
	public static void main(String[] args) {
	    Car car = new Car();   //创建外部类的对象
	    car.method();
	    // 运行上面的代码 会输出 : 我是外部类Car的普通方法!
	   	//运行内部类的方法
	   	//在上面method方法中已经创建了内部类bus的对象b
	   	//这里就是通过使用外部类Car的对象car去new一个内部类对象
	   	bus b = car.new bus();  
	   	//通过内部类对象b 去使用方法即可
	    b.internalMethod();   
		//输出:
		/*
		**这是bus内部类的普通方法!
		**我是内部类,现在在访问外部类Car的a:10
		**我是内部类,现在在访问内部类bus的b:30
		**我是内部类,现在在访问外部类bus的b:20
*/
   }
}

B、静态内部类:

静态内部类顾名思义也是把内部类用static修饰变为静态的,可以直接用外部类类名去调用,不需要创建对象:

package InternalClass;
public class Person {
    String name = "小王";
    static int age = 20;
    //创建静态内部类
    public static class Student{
        String name = "小红";
        //静态内部类的方法
        public static void study(){
            Person p = new Person(); //创建外部类的对象
            //静态访问非静态需要使用对象去调用
            System.out.println("内部类静态方法访问外部非静态成员:"+p.name);
            System.out.println("内部类静态方法访问外部静态成员:"+Person.age);
            System.out.println("内部类静态方法访问内部非静态成员:"+new Student().name);
        }
    }
    //程序运行入口
    public static void main(String[] args) {
        //静态内使用方法不需要创建对象
        Student.study();
    }
/*
输出:
内部类静态方法访问外部非静态成员:小王
内部类静态方法访问外部静态成员:20
内部类静态方法访问内部非静态成员:小红
*/
}

C、方法内部类:

方法内部类顾名思义也是在外部类的方法体内新建一个类:

package InternalClass;
/**
 * 方法内部类
 */
public class Student {
    //方法
    public void study(){
        int age = 20;
        String name = "小王";
        //在方法内写类:方法内部类
        class child{
            //方法内部类的方法
            public void play(){
                System.out.println("孩子喜欢玩!");
            }
        }
        //在外部类study的方法内创建一个生成内部类child的对象,并使用方法
        child c = new child();
        c.play();
    }
    //程序执行入口
    public static void main(String[] args) {
        Student stu = new Student();
        //这里调用study方法后,在study方法体内创建了child的对象和调用了play的方法
        stu.study();  
    }
}
//输出:我叫:小王我今年:20我爱学习
//	   孩子喜欢玩!

内部类的小结(有很多局限性,所以应该注意使用场景):

1.类前不能有访问修饰符

2.只能在此方法内使用

3.无法创造静态信息

4.可以直接访问方法内的局部变量和参数,但是不能修改

5.可以随意的访问外部类的任何信息

D、匿名内部类:

匿名内部类就是没有名字的内部类:

先定义一个接口:

public interface USB {
    void read();
}
package InternalClass;
/**
 * 匿名内部类
 */
public class Child {
    public static void main(String[] args) {
        USB u = new USB() {
            @Override
            public void read() {
                System.out.println("这是匿名内部类,是USB接口没有具名的子类,必须重写 接口做具体实现");
            }
        };
        u.read();
    }
}

匿名内部类需要注意的四点:

1.匿名内部类不能定义任何静态成员、方法

2.匿名内部类中的方法不能是抽象的

3.匿名内部类必须实现接口或抽象父类的所有抽象方法

4.匿名内部类访问的外部类成员变量或成员方法必须用static修饰

内部类的总结:

一、为什么要用内部类?

内部类拥有类的基本特征:可以继承父类,实现接口,在实际问题中我们会遇到一些接口无法解决的问题,此时我们可以使用内部类继承某个具体的或抽象的类,间接解决类无法多继承引起的一系列问题。

二、内部类的好处:

内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体内部类提供了更好的封装,除了该外围类,其他类都不能访问创建内部类对象的时刻并不依赖于外围类对象的创建

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java的内部类实例分析 http://www.20zxx.cn/705890/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务