zoukankan      html  css  js  c++  java
  • JAVA内部类(成员.局部.匿名)

    一.成员内部类

    定义在另一个类的内部,而且与成员方法和属性平级叫成员内部类。

    注意:1.成员内部类中不能存在static关键字,即,不能声明静态属性、静态方法、静态代码块等。

       2.在成员内部类中访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.成员属性”的形式 。

       3.创建成员内部类的实例使用“外部类名.内部类名 实例名 = 外部类实例名.new 内部类构造方法(参数)”的形式。在创建内部类实例之前需要先创建外部类的实例对象。

       内部类的定义文件名形式是“外部类定义名$内部类定义名”

      java代码:

    public class Girl {
        //成员内部类
        class Boy {
            public void go(){
                System.out.println("女神,我们今晚去约会");
            }
        }
        public void go(){
            Boy boy = new Boy();
            boy.go();
        }
        public static void main(String[] args) {
            Girl girl = new Girl();
            girl.go();
        }
    }

    运行结果:女神,我们今晚去约会

    二.方法内部类

    含义:定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。

    1.局部内部类只能在代码代码块、方法体内和作用域中使用(创建对象和使用类对象)

    .局部内部类的定义可以使用abstract修饰,声明为抽象类

    代码如下:

    package com.test.two;
    
    public class RestStart {
        public void soEase(){
            System.out.println("没事,可以重装系统");
        }
    }
    package com.test.two;
    
    public class Computer {
        //方法内部类
        public void play(){
            System.out.println("电脑中了病毒");
            class A extends RestStart{
                
            }
            new A().soEase();
            System.out.println("完全没有问题");
        }
        public static void main(String[] args) {
            new Computer().play();
        }
    }

    运行结果:

    电脑中了病毒
    没事,可以重装系统
    完全没有问题

    三.匿名内部类

    .匿名内部类只能和new连用,用于创建一个实例。匿名内部类只能使用一次,创建实例之后,类定义会立即消失(想要多次使用就要用到反射的知识了)。

    .匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类(或者父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。

    1.定义一个抽象类

    package com.test.three;
    
    public abstract class Work {
        public abstract void night();
    }

    2.定义一个类继承抽象类

    package com.test.three;
    
    public abstract class Teacher extends Work{
    
        @Override
        public void night() {
            
        }
        public void dayTime(){
            System.out.println("讲课");
        }
    }

    3.执行测试

    package com.test.three;
    
    public class TestOne {
        public static void main(String[] args) {
            Teacher t = new Teacher(){
                public void night(){
                    System.out.println("批改作业");
                }
            };
            t.dayTime();
            t.night();
        }
    }

    4.运行结果:

    讲课
    批改作业

  • 相关阅读:
    万兆铜缆--七类双绞线--光纤等内容
    [51CTO]反客为主 ,Linux 成为微软 Azure 上最流行的操作系统
    [知乎]超线程对游戏来说真的没用吗?
    SQLSERVER2017 最新补丁发布方式
    MSTSC 修改端口的简单方法 3389
    使用WinSW 将 exe 创建成Windows下面 service的方法 (将nginx创建成 services)
    [时政]在美国,是参议院议长的权力大,还是众议院议长的权力大
    内网内使用https 和 使用http 建立连接的速度对比
    Windows下 OpenSSL的安装与简单使用
    [转发]VMware厚置备延迟置零 、 厚置备置零、精简置备 区别
  • 原文地址:https://www.cnblogs.com/HuangTong/p/6069328.html
Copyright © 2011-2022 走看看