java 内部类

发布于:2024-03-22 ⋅ 阅读:(79) ⋅ 点赞:(0)

1、内部类概述

(1)概述:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类。

(2)内部类的定义格式

① 格式

② 范例

(3)内部类的访问特点

       ① 内部类可以直接访问外部类的成员,包括私有;

       ② 外部类要访问内部类的成员,必须创建对象。

(4)代码实现

package innerclass;

public class Outer {
    private int num = 10;
    public class Inner{
        public void show(){
            System.out.println(num);
        }
    }
    public void method(){
//        show();
        Inner inner = new Inner();
        inner.show();
    }
}

2、内部类的形式

按照内部类在类中定义的位置不同,可以分为如下两种形式:

(1)在类的成员位置:成员内部类;

(2)在类的局部位置:局部内部类;

成员内部类,外界如何创建对象使用呢?

① 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

② 范例:Outer.Inner oi = new Outer().new Inner();

2.1 成员内部类

(1)Outer类

package innerclass;

public class Outer {
    private int num = 10;
    public class Inner{
        public void show(){
            System.out.println(num);
        }
    }
    public void method(){
//        show();
        Inner inner = new Inner();
        inner.show();
    }
}

(2)InnerDemo类

package innerclass;

public class InnerDemo {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.method();
    }
}

(3)运行结果

2.2 局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用。

该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

(1)Outer类

package innerclass;

public class Outer {
    private int num = 10;

    public void method(){
        int num2 = 20;
         class Inner{
            public void show(){
                System.out.println(num2);
                System.out.println(num);
            }
        }
        Inner inner = new Inner();
        inner.show();
    }
}

(2)InnerDemo类

package innerclass;

public class InnerDemo {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.method();
    }
}

(3)运行结果

3、匿名内部类

匿名内部类是局部内部类的一种。

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类。

匿名内部类的定义格式:

① 格式

② 范例

本质:是一个继承了该类或者实现了该接口的子类匿名对象。

下面看代码实现:

(1)Inner接口

public interface Inner {
    void show();
}

(2)Outer类

package innerclass;

public class Outer {
    public void method(){
       //方式一:仅仅只是匿名内部类对象
       new Inner(){
           @Override
           public void show() {
               System.out.println("匿名内部类。。。");
           }
       };

        //方式二:匿名内部类对象调方法
        new Inner(){
            @Override
            public void show() {
                System.out.println("匿名内部类。。。");
            }
        }.show();

        //方式三:匿名内部类对象返回该对象
        Inner inner = new Inner() {
            @Override
            public void show() {
                System.out.println("匿名内部类。。。");
            }
        };
        inner.show();
        inner.show();
    }
}

(3)InnerDemo类

public class InnerDemo {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.method();
    }
}

(4)运行结果

4、匿名内部类在开发中的使用

如果没有内部类的话,是不是的创建Jumpping的实现类对象Cat。

然后,看下匿名内部类是怎么实现的。

(1)Jumpping接口

public interface Jumpping {
    void jump();
}

(2)JumppingOperator类

public class JumppingOperator {
    public void method(Jumpping jumpping){
        jumpping.jump();
    }
}

(3)InnerDemo类

public class InnerDemo {
    public static void main(String[] args) {
        JumppingOperator j = new JumppingOperator();
        j.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("猫能跳高。。。。");
            }
        });
    }
}

(4)运行结果

 


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到