• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

内部类

成员类

静态内部类

本地类

匿名内部类

什么是内部类

概念:在一个类中重新定义一个完整的类。

外部类{

内部类{

}

}

特点:

编译后,可以生成一个独立的字节码文件。

内部类可以直接访问外部类的私有成员,而不会破坏封装。

它可以为外部类提供必要的内部功能组件。

成员内部类

在类中定义的类,与实例变量(属性)和实例方法具有相同的级别。

外部类的实例部分。创建内部类对象时,必须依赖外部类对象。

Outer out=new Outer();

Inner in=new Inner();

MemberInner.java

包com.common class . demo 01;

//外部类

公共类成员内部{

//实例变量(属性)

私串name='大白很白';

private int age=100

//内部类

内部类{

私有字符串地址=' Mars

私串电话=' 130 ';

//方法

公共void show(){

//打印外部类的属性

System.out.println(名称);

System.out.println(年龄);

//打印内部类中的属性

System.out.println(地址);

System.out.println(电话);

}

}

}

TestOuter.java

包com.common class . demo 01;

公共类TestOuter {

公共静态void main(String[] args) {

//1.创建外部类对象

//member inner member inner=new member inner();

//2.创建一个内部类对象

//MemberInner。Inner Inner=member Inner . new Inner();

//一步一步来

会员。Inner inner=new MemberInner()。new Inner();

inner . show();

/*

大白鲨非常白

100

发动

130

*/

}

}

当外部类和内部类具有相同的名称属性时,将首先访问内部类属性。如果您想访问外部类属性,您需要添加类名Outer.this.属性.

内部成员类不能定义静态成员。您可以定义一个静态常量static final。

静态内部类

它不依赖于外部类对象,可以通过类名直接创建或访问,可以声明静态成员。

只能直接访问外部类的静态成员(实例成员需要实例化外部类对象)。

外部。内内=新外。inner();

外部。inner . show();

Outer.java

包com.common class . demo 02;

公共类外部{

私有字符串名=‘我的母语无语’;

private int age=100

//静态内部类3360与外部类具有相同的级别

静态类内部{

普里瓦

e String address = "地球"; private String phone = "111"; //静态成员 private static int count = 1000; public void show(){ //调用外部类的属性 //1.先创建外部类对象 Outer outer = new Outer(); System.out.println(outer.name); System.out.println(outer.age); //调用静态内部类的属性和方法 System.out.println(address); System.out.println(phone); //调用静态内部类的静态属性 System.out.println(Inner.count); } } }

TestOuter.java

package com.commonClass.demo02;
public class TestOuter {
    public static void main(String[] args) {
        //直接创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();
        //调用方法
        inner.show();
        /*
        我的母语是无语
        100
        地球
        111
        1000
         */
    }
}

局部内部类

  • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法。

  • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final。

  • 限制类的使用范围。

Outer.java

package com.commonClass.demo03;
//外部类
public class Outer {
    private String name = "野猪";
    private int age = 10;
    public void show(){
        //定义局部变量
        String address = "亚特兰蒂斯";//省略final
        //局部内部类:不能加任何访问修饰符
        class Inner{
            //局部内部类的属性
            private String phone = "123456";
            private String email = "dabai@123.com";
            //private final static int count = 12;
            public void show2(){
                //访问外部类的属性
                System.out.println(name);//省略了Outer.this.
                System.out.println(age);//省略了Outer.this.
                //访问内部类的属性
                System.out.println(phone);//省略了this.
                System.out.println(email);//省略了this.
                //访问局部变量,jdk1.7要求,变量必须是常量final,jdk1.8自动添加final
                System.out.println(address);//变为常量:亚特兰蒂斯
            }
        }
        //创建局部内部类对象
        Inner inner = new Inner();
        inner.show2();
    }
}

TestOuter.java

package com.commonClass.demo03;
public class TestOuter {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.show();
        /*
        野猪
        10
        123456
        dabai@123.com
        亚特兰蒂斯
         */
    }
}

匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)。
  • 必须继承一个父类或者实现一个接口。
  • 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。
  • 优点:减少代码量。
  • 缺点:可读性较差。

Usb.java

package com.commonClass.demo04;
//接口
public interface Usb {
    //服务
    void service();
}

Mouse.java

package com.commonClass.demo04;
public class Mouse implements Usb{
    @Override
    public void service() {
        System.out.println("连接电脑成功,鼠标开始工作了...");
    }
}

TestUsb.java

package com.commonClass.demo04;
public class TestUsb {
    public static void main(String[] args) {
        //创建接口类型的变量
        //Usb usb = new Mouse();
        //usb.service();//连接电脑成功,鼠标开始工作了...
        //局部内部类
/*        class Fan implements Usb{
            @Override
            public void service() {
                System.out.println("连接电脑成功,风扇开始工作了...");
            }
        }
*/
        //Usb usb = new Fan();
        //usb.service();//连接电脑成功,风扇开始工作了...
        //使用匿名内部类优化(相当于创建了一个局部内部类)
        Usb usb = new Usb() {
            @Override
            public void service() {
                System.out.println("连接电脑成功,风扇开始工作了...");
            }
        };
        usb.service();//连接电脑成功,风扇开始工作了...
    }
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now