首页 > 编程语言 > 详细

java的内部类概述

时间:2020-04-04 18:36:16      阅读:74      评论:0      收藏:0      [点我收藏+]
  • 内部类:
    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、后面的{ }代表了对接口的实现。

java的内部类概述

原文:https://www.cnblogs.com/yu011/p/12632744.html

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