首页 > 其他 > 详细

内部类

时间:2019-10-24 20:59:49      阅读:73      评论:0      收藏:0      [点我收藏+]

 

内部类: 写在一个类内部的类

          java中允许将一个类A声明再类B中,则类A就是内部类, 类B称为外部类

为什么要有内部类: 简答来说 比如一个人有个大脑 但是这个人的大脑是这个人独有的不是别人有的,所以这个大脑我们放在自己内部不暴露出去,

                         那为什么不去用私有一个变量或者方法来代表这个类呢? 因为大脑有很多的用途可以思考问题 提供人体必需物质等多个属性和方法所以定义一个内部类,

                        来只所属于这个人类的本身

 

 

内部类的总结

 

 *  内部类的分类,成员内部类(静态的非静态的)Vs局部内部类(方法内, 代码块内,构造器内)
 *
 *  成员内部类:
 *      一方面作为外部类的成员
 *          > 调用外部类的结构
 *          > 静态的内部类只能调用外部静态的方法
 *          > 可以被static修饰
 *          > 可以被四种不同权限修饰
 *
 *
 *      另一方面作为一个类
 *            >类内可以定义属性,方法, 构造器等
 *            >可以被final修饰不可以被继承, 不被final修饰可以被继承
 *            > 可以被抽象abstract修饰
 *
 *
 * 4:关注如下的3个问题:
 *       a: 如何实例化内部类成员对象
 *       b:如何在成员内部类中区分外部类结构
 *       c: 开发中局部内部类的使用

 

 

 

public class InnerClassTest {

    public static void main(String[] args) {

        // 实现静态的成员内部类
        PersonTestOne.InnTestTwo innTestTwo = new PersonTestOne.InnTestTwo();

        //实现非静态的成员内部类,因为是非静态的需要先实例化对象 然后去调用内部的非静态内部类,就是有了对象用对象去调用内部结构
        PersonTestOne personTestOne = new PersonTestOne();
        PersonTestOne.InnTestOne innTestOne = personTestOne.new InnTestOne();
        innTestOne.innermethod();
    }

}


class PersonTestOne{

    String name = "外部类的name";
    int age = 30;

    public void eat(){
        System.out.println("吃饭");
    }


    //静态成员内部类
   static class InnTestTwo{

    };

    // 非静态内部类
    class InnTestOne{
        String  name = "老王";
        int age;
        public void show(){
            System.out.println("非静态内部类的show方法");
        };

        public void innermethod(){
            method1();
            System.out.println(this.name);  // 调用内部类属性
            System.out.println(PersonTestOne.this.name); //调用外部类属性

        }
    };

    public static  void method1(){  //静态方法
        System.out.println("我是外部类的静态方法");
    }

    public void mthod(){
        // 局部内部类
        class aa{};
    }

    {
        //局部内部类
        class cc{};
    }
}

 

 

如何实例化外部中的静态内部类:

      直接在使用外部类.静态内部类就直接实例化

       // 实现静态的成员内部类
        PersonTestOne.InnTestTwo innTestTwo = new PersonTestOne.InnTestTwo();

 

如何实例化非静态内部类

 

外部类  外部类对象= new  外部类();
外部类对象.内部类 对象名 = 外部类对象.new. 内部类();


        //实现非静态的成员内部类,因为是非静态的需要先实例化对象 然后去调用内部的非静态内部类,就是有了对象用对象去调用内部结构
        PersonTestOne personTestOne = new PersonTestOne();
        PersonTestOne.InnTestOne innTestOne = personTestOne.new InnTestOne();

 

 

如何调用内部类中与外部类同名的属性

        public void innermethod(){
            method1();
            System.out.println(this.name);  // 调用内部类属性
            System.out.println(PersonTestOne.this.name); //调用外部类属性

        }

 

内部类

原文:https://www.cnblogs.com/zhaoyunlong/p/11734562.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!