首页 > 其他 > 详细

内部类

时间:2021-05-13 00:46:05      阅读:22      评论:0      收藏:0      [点我收藏+]

内部类:将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类

成员内部类 :定义在类中方法外的类。

访问特点:

1.内部类可以直接访问外部类的成员,包括私有成员。

2.外部类要访问内部类的成员,必须要建立内部类的对象。

package com.itehima.Demo11;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 20:20
 **/
   //1.内部类可以直接使用外部类的成员
    //外部类使用内部类的成员,要先创建内部类的对象
public class Person {//外部类
    //成员变量
    int num = 10;

    //成员方法
    public void fun(){
        Hear h = new Hear();
        System.out.println(h.a);
    }

    //成员内部类
    class Hear{
        int a = 100;

        public void method(){
            System.out.println(num);
        }
    }
}

  

package com.itehima.Demo11;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 20:28
 **/
public class PersonTest {
    public static void main(String[] args) {
        // 创建内部类对象, 使用成员
        // 外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
        Person.Hear h = new Person().new Hear();
        System.out.println(h.a);

    }
}

  匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的 父类或者父接口的 匿名的 子类对象

      步骤:

  1. 定义子类

  2. 重写接口中的方法

  3. 创建子类对象

  4. 调用重写后的方法

package com.itehima.Demo11.Demo02;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 20:50
 **/
public interface FlyAble {
    void fly();
}

  

package com.itehima.Demo11.Demo02;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 20:51
 **/
public class Bird implements FlyAble {
    @Override
    public void fly() {
        System.out.println("鸟会飞");
    }
}

  

package com.itehima.Demo11.Demo02;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 20:52
 **/
/*
    匿名内部类:
    前提: 存在类或者接口

    格式:
        new 类名() {}
        new 接口名() {}

    本质:
        new 类名() {} -> 代表继承了该类的子类对象
        new 接口名() {} -> 代表实现了该接口的实现类对象(子类对象)
 */
public class MyTest {
    public static void main(String[] args) {
        // 这段代码的目的:
        // 目的: 调用fun方法
        // 付出代价: 创建了一个类
        // Bird b = new Bird();
        // 调用fun方法
        // fun(b);
        // new Bird() ->  FlyAble接口的实现类对象(子类对象)
        // new FlyAble() {} -> FlyAble接口的实现类对象(子类对象)
        fun(new FlyAble() {
            @Override
            public void fly() {
                System.out.println("又上天了!~");
            }
        });

    }
    // 有一个方法, 方法的参数列表是 接口
    public static void fun(FlyAble f) {
        f.fly();
    }
}

  一段有意思的代码

package com.itehima.Demo11.Demo02;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @program: spring
 * @description: ${description}
 * @author: Mr.zw
 * @create: 2021-05-12 21:02
 **/
public class Demo01 {
    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("起床了");
            }
        }, new Date(121,4,12,21,7,50));
    }
}

  

 

内部类

原文:https://www.cnblogs.com/demowei/p/14761722.html

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