栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > .Net

类的内部成员之五:内部类

.Net 更新时间:发布时间: 百科书网 趣学号

目录

  1.java中允许将一个类A声明在另一个类B中,那么A就是内部类,类B就是外部类

  2.内部类的分类:

 3.成员内部类:

 4.关注以下的四个问题:

  5.总结:、


  1.java中允许将一个类A声明在另一个类B中,那么A就是内部类,类B就是外部类

  2.内部类的分类:

 成员内部类(静态的、非静态的)

局部内部类(方法内、代码块内、构造器内)

 3.成员内部类:

一方面,作为外部类的成员:
        >调用外部类的结构
        >可以被static修饰
        >可以被4种不同的权限修饰

    另一方面,作为一个类:
        >类内可以定义属性、方法、构造器等
        >可以被final修饰,表示此类不能被继承。言外之意,不使用final,就可以被继承
        >可以被abstract修饰

 4.关注以下的四个问题:

①如何实例化内部类的对象
          ②如何在成员内部类中区分调用外部类的结构和自己的结构
              形参:直接来
              自己的结构:this.
              外部类的结构:类名.this.
          

public class InnerClassTest {
	public static void main(String[] args) {
		// 创建Dog实例(静态内部类) 静态的方法可以用类来调用
		Person.Dog dog = new Person.Dog();
		dog.show();

		// 创建Bird实例(非静态内部类) 不能用类来调用
		Person p = new Person();
		Person.Bird bird = p.new Bird();// 用对象来调用内部结构
		bird.show();
	}
}

class Person {
	public void eat() {
		System.out.println("人吃饭");
	}

	// 静态的成员内部类
	static class Dog {
		// 静态的方法不能调用非静态的方法,还是生命周期的问题
		public void show() {
			System.out.println("我是一只狗");
		}
	}

	// 非静态的成员内部类
	class Bird {
		public void show() {
			System.out.println("我是一只鸟");
			Person.this.eat();// 内部类调用外部类时省略了 类名.this.
		}
	}

	// 局部内部类
	public void method1() {
		class A {

		}
	}

	// 局部内部类
	{
		class B {

		}
	}

	// 局部内部类
	public Person() {
		class C {

		}
	}
}

③开放中局部内部类的使用

package com.haiyu.java5;

public class InnerClassTest2 {
	// 开发中很少见
	public void method() {
		class A {

		}
	}

	// 返回一个实现了Comparable接口的对象
	public Comparable getCompareable() {
		// 方式一:
		// 创建一个实现了Comparable接口的类:局部内部类
//		class MyComparable implements Comparable {
//
//			@Override
//			public int compareTo(Object o) {
//				return 0;
//			}
//
//		}
//		return new MyComparable();

		// 方式二:
		return new Comparable() {

			@Override
			public int compareTo(Object o) {
				// TODO Auto-generated method stub
				return 0;
			}

		};
	}
}

  5.总结:、

成员内部类和局部内部类,在编译以后,都会生成字节码文件。
    格式:
        成员内部类:外部类$内部类名.class
        局部内部类:外部类$数字内部类名.class

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/984859.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号