zoukankan      html  css  js  c++  java
  • java的内部类概述

    • 内部类:
      1、什么是内部类?
      内部类:在类的内部又定义了一个新的类,被称为内部类。
      2、内部类的分类:
      静态内部类:类似于静态变量;
      实例内部类:类似于实例变量;
      局部内部类:类似子局部变量。
      3、使用内部类编写的代码,可读性很差。能不用尽量不用。
      4、匿名内部类是局部内部类的一种。
      因为这个类没有名字而得名,一种匿名内部类。
    • 静态内部类的访问方式
      1、静态内部类里有非静态方法的调用方式以及
      静态内部类里有静态方法的调用方式
    public class DemoTest {
        public static void main(String[] args) {
            //Inner1
            /*静态内部类里有非静态方法的调用方式*/
            Demo.Inner1 d1 = new Demo.Inner1();
            d1.print1();
            /*静态内部类里有静态方法的调用方式*/
            Demo.Inner1.print11();
        }
    }
    
    public class Demo {
        /*该类在类的内部,所以称为内部类。
        由于前面有static,所以称为"静态内部类"*/
        static class Inner1{
            public void print1(){
                System.out.println("Inner1");
            }
            public static void print11(){
                System.out.println("static Inner1");
            }
        }
    }
    

    2、实例内部类的调用方法

    public class DemoTest {
        public static void main(String[] args) {
            //Inner2
            Demo d2 = new Demo();
            Demo.Inner2 inner2 = d2.new Inner2();
            inner2.print2();
        }
    }
    
    public class Demo {
        /*该类在类的内部,所以称为内部类。
        没有static叫做实例内部类。*/
        class Inner2{
            public void print2(){
                System.out.println("Inner2");
            }
        }
    }
    

    3、局部内部类的调用方法

    public class DemoTest {
        public static void main(String[] args) {
            //Inner3
            new Demo().doSome();
        }
    }
    
    public class Demo {
        public void doSome(){
            /*局部变量*/
            int i = 1;
            /*该类在类的内部,所以称为内部类。
            局部内部类*/
            class Inner3{
                public void print3(){
                    System.out.println("Inner3");
                }
            }
            new Inner3().print3();// 通过内部类的实例化对象调用方法
        }
    }
    
    • 匿名内部类
      1、不使用匿名内部类
      代码示例:
    public interface Compute {
        int sum(int a, int b);
    }
    
    public class Demo implements Compute{
    
        @Override
        public int sum(int a, int b) {
            int c = a + b;
            return c;
        }
    
    }
    
    public class DemoTest{
    
        public static void main(String[] args) {
            DemoTest demoTest = new DemoTest();
            demoTest.mySum(new Demo(),1,2);
        }
    
        public void mySum(Compute c, int x, int y){
            int value = c.sum(x,y);
            System.out.println(value);
        }
    
    }
    

    2、使用匿名内部类后
    代码示例:

    public interface Compute {
        int sum(int a, int b);
    }
    
    public class DemoTest{
    
        public static void main(String[] args) {
            DemoTest demoTest = new DemoTest();
            /*demoTest.mySum(new Demo(),1,2);*/
            demoTest.mySum(new Compute(){
                public int sum(int a, int b) {
                    int c = a + b;
                    return c;
                }
            },1,2);
        }
    
        public void mySum(Compute c, int x, int y){
            int value = c.sum(x,y);
            System.out.println(value);
        }
    
    }
    
    • 不建议使用匿名内部类。
      1、因为一个类没有名字,没有办法重复使用。
      2、另外代码太乱,可读性太差。
      3、使用匿名内部类,表示这个Demo这个类没名字了。
      4、这里表面看上去好像是接口可以直接new了,实际上并不是接口可以new了。
      5、后面的{ }代表了对接口的实现。
  • 相关阅读:
    【django后端分离】Django Rest Framework之一般配置(简单剖析)
    【python小随笔】celery周期任务(简单原理)
    【django后端分离】mysql原生查询命令后,RawQueryset类型的自定义序列化返回json格式
    【python小随笔】Django+错误日志(配置Django报错文件指定位置)
    luogu P3194 [HNOI2008]水平可见直线 |单调栈
    luogu P6247 [SDOI2012]最近最远点对 |随机化
    luogu P3567 [POI2014]KUR-Couriers |莫队+随机化
    P6569 [NOI Online #3 提高组]魔法值| 矩阵乘法
    luogu P1452 【模板】旋转卡壳
    luogu P3829 [SHOI2012]信用卡凸包 |凸包
  • 原文地址:https://www.cnblogs.com/yu011/p/12632744.html
Copyright © 2011-2022 走看看