`
weijiewell
  • 浏览: 10358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA语法之----内部类

阅读更多
一、内部类的定义
放在一个类的内部的类我们就叫内部类.

二、作用与特点
1、内部了可以很好的实现隐藏
一般的非内部类,是不允许有private与protected权限的,但内部类可以
2、可以实现多重继承
3、内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。
几种内部类的共性:
A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。
B、内部类用户其宿主的所有元素的访问权限

以下我们会对如下几个问题进行分析,另贴出相应的代码
1、分析内部类是否可以直接被创建(实例化)?
2、内部类外部类成员的访问权限?
3、匿名内部类

通过这个例子我们来熟悉内部类,并说明内部类无法直接被创建,必须通过其宿主来进行实例化。

/**
 * 宿主类
 */
public class OuterClass {
	public InnerClass innerClass = new InnerClass();
	
	/**
	 * 内部类
	 */
	public class InnerClass {
		public String name;
		
		public InnerClass(){
			name = "InnerClass's name....";
		}
	}
	
	public static void main(String[] args) {
		/**
		 * 错误!!! 编译器会报错
		 * 不能通过new的方式直接实例化内部类
		 */
		// InnerClass innerClass = new InnerClass();  
	
		/**
		 * 正确,只能通过宿主来创建内部类
		 */
		InnerClass innerClass = new OuterClass().innerClass;
		
		//或者
		innerClass = new OuterClass().new InnerClass()

		System.out.println(innerClass.name);
	}
}


2、内部类对外部类成员的访问权限
/**
 * 外部类
 */
public class OuterClass {
	
	private String privateName = "";   //外部类private成员
	protected String protectedName = "";   //外部类protected成员
	public String publicName = "";   //外部类public成员
	
	public OuterClass (){
		privateName = "private ";
		protectedName = "protected ";
		publicName = "public ";
	}
	
	/**
	 * 内部类
	 */
	public class InnerClass {
		public String publicName = "InnerClass publicName...";   //内部类public成员
		protected String protectedName = "InnerClass ProtectedName...";//内部类protected成员
		private String privateName = "InnerClass privateName...";//内部类private成员
		
		public InnerClass(){
			InnerClass.this.publicName += OuterClass.this.privateName;     //访问外部类私有成员
			InnerClass.this.publicName += OuterClass.this.protectedName;	 //访问保护成员
			InnerClass.this.publicName += OuterClass.this.publicName;		 //访问外部类共有成员
			print(); //引用外部类私有方法
		}
	}
	//内部类可以直接访问外部类的所有权限的方法
	private void print(){
		System.out.println("---OuterClass print...");
	}
	
	//外部类的非静态方法访问内部类
	public void not_static_method(){
		InnerClass innerClass = new InnerClass();
		System.out.println(innerClass.publicName + " " + innerClass.privateName);  //可以看到
	}
	
	//外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
	public static void static_method(){
		System.out.println(new OuterClass().new InnerClass().publicName);
	}
	
	public InnerClass getInnerClass() {
		return new InnerClass();
	}

	public static void main(String[] args) {
		OuterClass out = new OuterClass();
		InnerClass innerClass = out.new InnerClass(); //.getInnerClass();
		System.out.println(innerClass.publicName);
		out.not_static_method();
		
	}
}

通过该例子可以看到
内部类拥有外部类成员,以及外部类的所有方法的访问权限。
外部类的静态方法与其他外部访问内部类的权限一样,非静态方法拥有内部类成员的所有访问权限


3、匿名内部类,引用自http://topic.csdn.net/u/20080728/20/d60f719a-c103-44b8-8d0c-bc1c818b768a.html
匿名内部类没有名字,所以我们无从给它指定构造方法(构造方法必须和类名同名)但是匿名内部类可以通过直接调用父类的构造方法实现初始化
例子说明一切
public class Main {

    public static void main(String[] args) {
        InnerTest inner = new InnerTest();
        Test t = inner.get(3);
        System.out.println(t.getI());
    }
}

class Test {  //超类
    private int i;
    public Test(int i) {
        this.i = i;
    }
    public int getI() {
        return i;
    }
}

class InnerTest {  //用于内部类的测试
    public Test get(int x) {
        return new Test(x) {  //创建匿名内部类,调用父类的构造方法
            @Override
            public int getI() {
                return super.getI() * 10;
            }
        };
    }
}

分享到:
评论

相关推荐

    JAVA语法总结 - 内部类

    ### JAVA语法总结 - 内部类 #### 一、内部类概述 内部类(Inner Class)自Java 1.1版本引入以来,一直是Java编程语言中的一个重要特性。它允许开发者在一个类的内部定义另一个类,这有助于更好地组织代码并实现更...

    11.java基础拾遗--匿名内部类语法详解.mp4

    11.java基础拾遗--匿名内部类语法详解.mp4

    sonar-java-plugin-5.12.1.17771.rar

    其次,sonar-java-plugin是SonarQube的核心Java插件,它包含了对Java语言的全方位支持,包括语法解析、代码复杂度计算、单元测试覆盖率分析等。版本5.12.1.17771代表了插件的最新优化和改进,它提供了大量的内置规则...

    day002 JAVA语法基础-方法.doc

    Java语法基础中的“方法”是程序设计中的核心概念,它封装了特定的计算逻辑或操作,可以在程序的不同位置被多次调用。以下是对方法、参数传递、可变参数以及Arrays工具类的详细说明: 1. **方法的练习与注意事项**...

    java基础教程----精华版

    1. **Java语法基础**: - **变量**:在Java中,变量是存储数据的容器,分为基本类型(如int, double, boolean等)和引用类型(如类、接口、数组)。 - **数据类型**:Java有两大类数据类型,即原始类型...

    JavaParser java-symbol-solver 使用官方文档

    ### JavaParser与java-symbol-solver综合运用 #### 引言 在软件开发过程中,解析、理解和操作源代码是一项常见的需求。...对于希望深入探索Java代码内部机制的开发者而言,掌握这两项技术无疑是十分有价值的。

    编译原理-LR0语法分析-java

    总之,编译原理中的LR0语法分析是编译器设计的重要组成部分,通过Java实现能够帮助开发者理解语言解析的内部机制。在实际应用中,LR0分析常被作为更复杂的LR(k)或LALR(1)分析的基础,以处理更复杂的语法结构。学习和...

    eclipse-java-2019-06-R-win32-x86_64.zip

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据...总之,"eclipse-java-2019-06-R-win32-x86_64.zip"是一个为Windows 64位用户准备的、全面的Java开发环境,是开发者不可或缺的工具之一。

    java接口与内部类教学PPT

    1.接口-简介 2.接口-作用 3.接口-定义方式 4....内部类-特殊语法规则 10.内部类-安全性 11.内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述

    JAVA 内部类 PPT

    Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...

    96.094.JAVA基础教程_Java基本语法-if-else的例题1(96).rar

    本教程专注于Java的基础,特别是关于基本语法和控制流结构的一部分,尤其是`if-else`语句。`if-else`是Java中进行条件判断的关键部分,它允许程序根据不同的条件执行不同的代码块。 在Java中,`if`语句用于检查一个...

    拓薪教育-java基础语法-任亮.docx

    ### 拓薪教育-java基础语法-任亮 #### 一、标识符 在Java语言中,标识符是指用于命名变量、方法、类等元素的字符序列。它们既可以是由Java开发工具包(JDK)预先定义好的,也可以是开发者自定义的。 1. **Java...

    javaParser 包 javaparser-core-3.6.16.jar

    JavaParser 提供了对 Java 语法的深度理解,能够将源代码转换为抽象语法树(Abstract Syntax Tree, AST)。AST 是源代码结构的一种表示,它将代码的逻辑结构以树形的形式展现出来,方便开发者进行各种分析和修改。...

    基于java的-109-java学习平台--LW-源码.zip

    Java的学习涵盖了基础语法、面向对象编程、集合框架、多线程、网络编程等多个方面,是软件工程师必备的技能之一。 其次,从文件夹结构来看,“springbootm55rv”目录表明该平台使用了Spring Boot框架。Spring Boot...

    使用内部和匿名类优化Java代码

    Java 1.1 引入了内部类和匿名类,这两种特性极大地增强了代码的灵活性和可读性。内部类是指定义在另一个类内部的类,它可以是静态的或非静态的,根据其是否需要访问外部类的实例成员来区分。静态内部类与普通类的...

    Java语法手册.rar

    Java语法手册是编程者在学习或工作...以上只是Java语法手册中部分核心知识点的概述,实际手册会包含更多细节,如枚举、注解、并发工具类、集合框架的高级特性和JVM优化等内容,帮助开发者深入理解并熟练掌握Java编程。

    java基础语法程序源代码

    本压缩包包含了一系列关于Java基础语法的源代码示例,旨在帮助初学者深入理解和掌握Java编程的核心概念。以下将针对每个章节的可能内容进行详细阐述: 1. **Chapter 1:基础语法** - 变量声明与初始化:包括基本...

    Java的内部类讲解案例代码(成员内部类、局部内部类、匿名内部类、静态内部类、外部类访问四种内部类、其他类访问四种内部类...)

    即使你已经熟悉了基本的Java语法,但想要学习更高级的概念和技巧,这个源码资源也能给你提供一些帮助。 使用场景: 内部类在Java中广泛应用于各种场景,特别是当一个类与其外部类有紧密联系并且仅在该外部类中使用...

    java基础教程-基本语法

    Java基础教程 - 基本语法 Java是一种广泛使用的高级编程语言,以其“一次编写,到处运行”的跨平台特性而闻名。本教程旨在帮助初学者掌握Java语言的基础语法,为后续深入学习打下坚实基础。 一、Java语言概述 Java...

Global site tag (gtag.js) - Google Analytics