黑马程序员——Java基础---内部类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



一.概述

内部类定义在另一个类中的类,称为内部类(Inner Class),包含内部类的类,称为外部类(Outer Class)应用场合:在窗体程序中进行事件处 理分类:成员内部类,局部内部类,静态内部类,匿名内部类.

二.成员内部类

1)在外部类中访问内部类,可以访问内部类中的所有成员,包含private修饰的 

2)在外部类外访问内部类,不能访问内部类中的private修饰的成员 

3)在内部类中访问外部类,直接访问,如果内部类和外部类的变量名相同,可使用“外部类.this.变量”

<span style="white-space:pre">	</span>public class Test1 {
    <span style="white-space:pre">	</span>public static void main(String[] args) {
        <span style="white-space:pre">	</span>Outer out=new Outer();//创建外部类的对象
        <span style="white-space:pre">	</span>out.print();//调用外部类的方法 
        <span style="white-space:pre">	</span>//在外部类的外部创建内部类的对象,语法:外部类.内部类  对象名=外部类对象.new 内部类();
        //Outer.Inner in=out.new Inner(); //必须先创建外部类的对象
        Inner in=out.new Inner();
        //System.out.println(in.age);//无法访问内部类的private成员
        in.show();
   <span style="white-space:pre">	</span> <span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Outer{ //外部类
    <span style="white-space:pre">	</span>private String name="tom";//外部类的成员变量
    <span style="white-space:pre">	</span>static String address="上海";
    <span style="white-space:pre">	</span>class Inner{ //内部类
        private int age=20;//内部类中的成员变量
        private String name="张三";
        String address="北京";
        public void show(){
            String address="广州";
            System.out.println("内部类中的show方法");
            //3.在内部类中访问外部类
            System.out.println("内部类中的name:"+this.name);
            System.out.println("外部类中的name:"+Outer.this.name);
            System.out.println("内部类中的age:"+age);
            System.out.println("内部类中的address:"+this.address);
            System.out.println("外部类中的address:"+Outer.address);
            System.out.println("内部类中的局部变量address:"+address);
       <span style="white-space:pre">		</span> }
    <span style="white-space:pre">	</span>}

    <span style="white-space:pre">	</span>在外部类中访问内部类
    <span style="white-space:pre">	</span>public void print(){
        System.out.println("外部类中的print方法");
        Inner in=new Inner();//直接创建内部类的对象
        System.out.println(in.age);//访问内部类的属性,可以访问private成员
        in.show();
    <span style="white-space:pre">	</span>}

三. 局部内部类  

也称为方法内部类,即定义在外部类的方法中的类  

1)访问范围:只能在外部类的方法中使用,不能使用修饰符进行修饰  

2)在局部内部类中不能访问外部类的方法中非final修饰的成员

<span style="white-space:pre">	</span>public class Test1 {
    <span style="white-space:pre">	</span>public static void main(String[] args) {
        MOuter out=new MOuter();
        <span style="white-space:pre">	</span>out.show();
    <span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class MOuter{
    <span style="white-space:pre">	</span>String name="tom";
    <span style="white-space:pre">	</span>public void show(){
        final int age=20;
        System.out.println("外部类中的show方法");
        class MInner{ //局部内部类
            String sex="male";
            private String address="南京";
            public void print(){
                System.out.println("局部内部类中的print方法");
                System.out.println("外部类中的成员变量name:"+name);
                System.out.println("外部类中局部变量age:"+age);
            }
        }

        //只能在外部类的方法中使用
        MInner in=new MInner();
        System.out.println(in.sex);
        System.out.println(in.address);
        in.print();
    <span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
. 静态内部类  

使用static修饰的成员内部类,不能访问外部类中非static成员

<span style="white-space:pre">	</span>public class Test02 {
    <span style="white-space:pre">	</span>public static void main(String[] args) {
        //创建静态内部类,无需创建外部类的对象
        SInner in=new SInner();
        in.show();
    <span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class SOuter{
    <span style="white-space:pre">	</span>static String name="joy";
    <span style="white-space:pre">	</span>static class SInner{  //静态内部类
        String sex="male";
        public void show(){
            System.out.println("静态内部类中的show方法");
            System.out.println("外部类中的name:"+name);
        <span style="white-space:pre">	</span>}
    <span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}

五. 匿名内部类

即没有名字的内部类,因为此类只需要使用一次,所以没有起名字的必要
  1)在创建匿名内部类时,必须作为new语句的一部分来声明,用法:
    接口|抽象类  对象名 =  new 接口|抽象类{
        匿名内部类
    }
  2)在创建匿名内部类时,会自动创建一个匿名内部类的对象,并赋给变量

<span style="white-space:pre">	</span>public class Test03 {
    <span style="white-space:pre">	</span>public static void main(String[] args) {
        Service s=new Service(){//匿名内部类
            //实现接口中的抽象方法
            public void show(){
                System.out.println("实现Service接口的匿名内部类");
            }
        };
        s.show();
        Animal pig=new Animal() {           
            public void play() {
                System.out.println("你好");
            }

                public void show() {
                System.out.println("你好啊");
            }
        }
        pig.show();
        pig.play();

        Student stu=new Student(){
            public void show(){
                System.out.println("大家好");
            }
        };
        stu.show();
    <span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
  <span style="white-space:pre">	</span>//定义接口
 <span style="white-space:pre">	</span>interface Service{
   <span style="white-space:pre">	</span> //抽象方法
    <span style="white-space:pre">	</span>void show();
<span style="white-space:pre">	</span>}<span style="font-family: Arial, Helvetica, sans-serif;">//抽象类abstract class Animal{</span>
   <span style="white-space:pre">	</span> String name;

    <span style="white-space:pre">	</span>public void show(){
        System.out.println("你好");
    <span style="white-space:pre">	</span>}

    <span style="white-space:pre">	</span>public abstract void play();
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>class Student{
   <span style="white-space:pre">	</span> public void show(){
        System.out.println("你好啊");
   <span style="white-space:pre">	</span> }
<span style="white-space:pre">	</span>}


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值