一、内部类的定义
放在一个类的内部的类我们就叫内部类.
二、作用与特点
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语法总结 - 内部类 #### 一、内部类概述 内部类(Inner Class)自Java 1.1版本引入以来,一直是Java编程语言中的一个重要特性。它允许开发者在一个类的内部定义另一个类,这有助于更好地组织代码并实现更...
11.java基础拾遗--匿名内部类语法详解.mp4
其次,sonar-java-plugin是SonarQube的核心Java插件,它包含了对Java语言的全方位支持,包括语法解析、代码复杂度计算、单元测试覆盖率分析等。版本5.12.1.17771代表了插件的最新优化和改进,它提供了大量的内置规则...
Java语法基础中的“方法”是程序设计中的核心概念,它封装了特定的计算逻辑或操作,可以在程序的不同位置被多次调用。以下是对方法、参数传递、可变参数以及Arrays工具类的详细说明: 1. **方法的练习与注意事项**...
1. **Java语法基础**: - **变量**:在Java中,变量是存储数据的容器,分为基本类型(如int, double, boolean等)和引用类型(如类、接口、数组)。 - **数据类型**:Java有两大类数据类型,即原始类型...
### JavaParser与java-symbol-solver综合运用 #### 引言 在软件开发过程中,解析、理解和操作源代码是一项常见的需求。...对于希望深入探索Java代码内部机制的开发者而言,掌握这两项技术无疑是十分有价值的。
总之,编译原理中的LR0语法分析是编译器设计的重要组成部分,通过Java实现能够帮助开发者理解语言解析的内部机制。在实际应用中,LR0分析常被作为更复杂的LR(k)或LALR(1)分析的基础,以处理更复杂的语法结构。学习和...
Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据...总之,"eclipse-java-2019-06-R-win32-x86_64.zip"是一个为Windows 64位用户准备的、全面的Java开发环境,是开发者不可或缺的工具之一。
1.接口-简介 2.接口-作用 3.接口-定义方式 4....内部类-特殊语法规则 10.内部类-安全性 11.内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
Java内部类是Java语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
本教程专注于Java的基础,特别是关于基本语法和控制流结构的一部分,尤其是`if-else`语句。`if-else`是Java中进行条件判断的关键部分,它允许程序根据不同的条件执行不同的代码块。 在Java中,`if`语句用于检查一个...
### 拓薪教育-java基础语法-任亮 #### 一、标识符 在Java语言中,标识符是指用于命名变量、方法、类等元素的字符序列。它们既可以是由Java开发工具包(JDK)预先定义好的,也可以是开发者自定义的。 1. **Java...
JavaParser 提供了对 Java 语法的深度理解,能够将源代码转换为抽象语法树(Abstract Syntax Tree, AST)。AST 是源代码结构的一种表示,它将代码的逻辑结构以树形的形式展现出来,方便开发者进行各种分析和修改。...
Java的学习涵盖了基础语法、面向对象编程、集合框架、多线程、网络编程等多个方面,是软件工程师必备的技能之一。 其次,从文件夹结构来看,“springbootm55rv”目录表明该平台使用了Spring Boot框架。Spring Boot...
Java 1.1 引入了内部类和匿名类,这两种特性极大地增强了代码的灵活性和可读性。内部类是指定义在另一个类内部的类,它可以是静态的或非静态的,根据其是否需要访问外部类的实例成员来区分。静态内部类与普通类的...
Java语法手册是编程者在学习或工作...以上只是Java语法手册中部分核心知识点的概述,实际手册会包含更多细节,如枚举、注解、并发工具类、集合框架的高级特性和JVM优化等内容,帮助开发者深入理解并熟练掌握Java编程。
本压缩包包含了一系列关于Java基础语法的源代码示例,旨在帮助初学者深入理解和掌握Java编程的核心概念。以下将针对每个章节的可能内容进行详细阐述: 1. **Chapter 1:基础语法** - 变量声明与初始化:包括基本...
即使你已经熟悉了基本的Java语法,但想要学习更高级的概念和技巧,这个源码资源也能给你提供一些帮助。 使用场景: 内部类在Java中广泛应用于各种场景,特别是当一个类与其外部类有紧密联系并且仅在该外部类中使用...
Java基础教程 - 基本语法 Java是一种广泛使用的高级编程语言,以其“一次编写,到处运行”的跨平台特性而闻名。本教程旨在帮助初学者掌握Java语言的基础语法,为后续深入学习打下坚实基础。 一、Java语言概述 Java...