• java ->内部类


    内部类概念

      什么是内部类

        将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类

      什么时候使用内部类

      在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含这发动机,这时发动机就可以使用内部类来描述。

      class 汽车 { //外部类

        class 发动机 { //内部类

        }

      }  

      内部类的分类

      内部类分为成员内部类局部内部类

      我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。在内部类中可以直接访问外部类的所有成员

    成员内部类

     成员内部类,定义在外部类中的成员位置。与类中的成员变量相似,可通过外部类对象进行访问

    l  定义格式

    class 外部类 {

        修饰符 class 内部类 {

            //其他代码

    }

    }

      访问方式

        外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

     

      成员内部类代码演示

    定义类

    class Body {//外部类,身体

        private boolean life= true; //生命状态

         public class Heart { //内部类,心脏

        public void jump() {

             System.out.println("心脏噗通噗通的跳")

                System.out.println("生命状态" + life); //访问外部类成员变量

    }

     

    }

    }

    访问内部类

    public static void main(String[] args) {

        //创建内部类对象

        Body.Heart bh = new Body().new Heart();

        //调用内部类中的方法

        bh.jump();

    }

    局部内部类

      局部内部类,定义在外部类方法中的局部位置与访问方法中的局部变量相似,可通过调用方法进行访问

      定义格式

      class 外部类 {

        修饰符 返回值类型 方法名(参数) {

          class 内部类 {

            //其他代码

          }

        }

      }

      访问方式

      在外部类方法中,创建内部类对象,进行访问

    l  局部内部类代码演示

    定义类

    class Party {//外部类,聚会

        public void puffBall(){// 吹气球方法

       class Ball {// 内部类,气球

        public void puff(){

          System.out.println("气球膨胀了");

        }

      }

      //创建内部类对象,调用puff方法

      new Ball().puff();

      }

    }

    访问内部类

    public static void main(String[] args) {

        //创建外部类对象

        Party p = new Party();

        //调用外部类中的puffBall方法

        p.puffBall();

    }

    内部类的实际使用——匿名内部类

    匿名内部类概念

      内部类是为了应对更为复杂的类间关系。查看源代码中会涉及到,而在日常业务中很难遇到,这里不做赘述。

      最常用到的内部类就是匿名内部类,它是局部内部类的一种。

      定义的匿名内部类有两个含义:

      n  临时定义某一指定类型的子类

      n  定义后即刻创建刚刚定义的这个子类的对象

    定义匿名内部类的作用与格式

    作用:匿名内部类是创建某个类型子类对象的快捷方式

    格式:

    new 父类或接口(){

        //进行方法重写

    };

      代码演示

    //已经存在的父类:

    public abstract class Person{

        public abstract void eat();

    }

    //定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量

    Person  p = new Person(){

        public void eat() {

            System.out.println(“我吃了”);

    }

    };

    //调用eat方p.eat();

    使用匿名对象的方式,将定义子类与创建子类对象两个步骤由一个格式一次完成,。虽然是两个步骤,但是两个步骤是连在一起完成的。

    匿名内部类如果不定义变量引用,则也是匿名对象。代码如下:

    new Person(){

        public void eat() {

            System.out.println(“我吃了”);

    }

    }.eat();

  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/miaoxingren/p/9380566.html
Copyright © 2020-2023  润新知