`
hehaibo
  • 浏览: 417634 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

内部类知识总结2--内部类继承和同名问题

 
阅读更多

内部类的继承:

 

class Outer {

    privateinta;

    public Outer(int a) {

       this.a = a;

    }

    class Inner {//内部类

       public Inner() {

       }

       publicvoid print() {

           System.out.println("a=" + a);

       }

    }

    //内部继承

    class InnerSub extends Inner {

    }

}

 

publicclass Testman extends Outer.Inner {

 

    // public Testman(){}//编译错误 java虚拟机无法决定让Testman实例引用哪个Outer实例。

    // 通过传递Outer实例的引用然后在构造方法中调用super语句来建立外部类和内部类之间的关联关系

    public Testman(Outer o) {

       o.super();

    }

 

    publicstaticvoid main(String[] args) {

       Outer o1 = new Outer(1);

       Outer o2 = new Outer(2);

       // in变量引用的inner实例会自动引用o1变量引用的实例。

       Outer.Inner in = o1.new Inner();

       in.print();

       Testman t1 = new Testman(o1);

       t1.print();// print 1

       Testman t2 = new Testman(o2);

       t2.print(); // print 2

    }

}

在直接构造实例内部类的实例的时候 java虚拟机会自动使用内部类实例引用它的外部内实例。

 

子类和父类中的内部类同名的问题:

内部类并不存在覆盖的概念,假如子类和父类中存在同名的内部类,那么这个内部类也会分别在不同的名字空间中,因此不会发生冲突。Outers.Inner SubOuter.Inner类是独立的两个类。不存在覆盖关系。Java编译器不会检查子类中的Inner类是否缩小了父类中的Inner类的访问权限。

class Outers {

    Inner in;

 

    public Outers() {

       in = new Inner();// 构造内部类实例

    }

    publicclass Inner { // public访问级别

       public Inner() {

           System.out.println("inner of Outer");

       }

    }

}

 

publicclass SubOuter extends Outers {

    class Inner {

       public Inner() {

           System.out.println("inner of SubOuter");

       }

    } 

    publicstaticvoid main(String[] args) {

       //执行 new SubOuter()会调用父类的构造方法

       SubOuter.Inner subOuter= new SubOuter().new Inner();

       Outers.Inner outer = new Outers().new Inner();

    }

}

分享到:
评论

相关推荐

    java知识总结------关键知识点总结

    2. **匿名内部类**: - 匿名内部类没有名字,可以直接实例化一个接口或者继承一个非抽象类。但是,匿名内部类不能继承其他类,但可以实现一个或多个接口。 3. **Static Nested Class 和 Inner Class**: - 静态...

    JAVA内部类总结

    ### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高...希望本文能帮助开发者更好地理解和应用Java内部类的相关知识。

    内部类和设计模式1

    【内部类】 内部类是Java中的一种...学习内部类和设计模式能够提高代码的复用性、可维护性和灵活性,是成为专业Java开发人员必备的知识点。通过深入理解和实践这些概念,可以编写出更加高效、易于理解和扩展的代码。

    Java知识总结--CoreJava.doc

    - final用于声明不可改变的属性、方法和类。 - finally是异常处理的关键字,确保代码块无论是否发生异常都会执行。 - finalize是Object类的一个方法,用于垃圾回收时执行资源清理。 8. **Overload与Override的...

    JavaSE 基础知识总结

    ### JavaSE基础知识总结 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java语言的设计目标之一是易于理解和使用,它的语法清晰、简洁。 - **面向对象:** Java是一种纯面向对象的语言,支持封装...

    java基础继承封装多态

    本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...

    Java内部类

    需要注意的是,如果外部类和内部类中有同名的成员变量,那么内部类可以通过 `OuterClass.this` 来区分它们: ```java class OuterClass { private int mMem = 10; public class InnerClass { private int mMem ...

    java oop总结-编程程序

    - **继承**:允许一个类继承另一个类的属性和方法,从而支持代码重用和类的层次结构构建。 - **多态**:是指一个接口可以有多种不同的实现方式,即同一接口可以被多个类实现或继承。 #### 二、类的定义与成员 - **...

    关于c#继承机制的详细概述

    - **继承的传递性**:如果类C继承自类B,类B又继承自类A,那么类C将继承类A和B的所有成员。所有类都间接继承自System.Object类。 - **扩展与保留**:派生类可以扩展基类,但不能移除继承的成员。它能添加新成员,...

    Java 基础类的继承与覆盖

    总结起来,Java的继承机制允许我们构建类的层次结构,从而实现代码的复用和定制。`super`关键字用于调用父类的构造器、成员变量和方法,而方法覆盖则让我们能根据需要改变子类的行为。理解并熟练运用这些概念对于...

    JAVA基础知识精华总结 收藏

    ### JAVA基础知识精华总结 #### 对象的初始化 - **非静态对象的初始化**: - 创建对象时,类的所有数据成员会首先进行初始化。 - 基本类型的成员(如`int`型),初始化为0。 - 对象类型的成员会按照它们在类中...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    根据给定文件的信息,我们可以总结出以下几个面向对象的基础知识点,并结合具体的题目来进行解析: ### 面向对象基础知识概述 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理...

    C++基础知识总结

    ### C++基础知识总结 #### 一、C++数据和变量的类型及变量作用域 **1. 基本的内置类型** C++提供了一系列基本的内置数据类型,用于存储不同种类的数据。以下是一些常见的类型及其特点: - **布尔型 (`bool`)**:...

    2015.6.13--java第六章类和对象章总结.doc

    ### Java第六章类和对象知识点总结 #### 一、面向对象的基本概念 1. **面向对象的三大特征**: - **封装**:封装是指隐藏对象的属性和实现细节,只对外提供公共访问方式。 - **继承**:继承使得一个类(子类)...

    java面向对象程序设计基础知识总结

    内部类是定义在另一个类内部的类,包括成员内部类、局部内部类、匿名内部类等,可访问外部类的私有属性和方法。 6. 集合框架 Java集合框架提供了一组数据结构和算法,如List、Set、Map等接口及其实现类,如...

    Java软件开发实战 Java基础与案例开发详解 6-9 继承和多态 章节练习 共4页.pdf

    #### 6-2 Object类 - **Object类**: 是所有Java类的根类,所有自定义的类都直接或间接地继承自Object类。 - **常用方法**: - `equals(Object obj)`: 判断两个对象是否相等。 - `toString()`: 返回对象的字符串表示...

    java面向对象知识点总结

    ### Java面向对象知识点总结 #### 1. 类与对象 **1.1 类** - **概念**: 类是用来描述一类事物的共性内容的抽象模型。 - **创建**: 创建类时,需要考虑该类所描述的对象应该具备哪些属性(特征)和行为(功能)。 ...

    java学习总结报告-8页.pdf

    继承允许创建新的类并继承已有类的属性和方法;多态则是实现灵活和可扩展代码的关键。 7. **重载和覆盖**:方法重载(Overloading)是编译时多态,发生在同一类内,通过不同的参数列表区分不同的方法。方法覆盖...

    java面试八股文java基础知识总结.pdf

    ### Java基础知识总结 #### Java概述 - **何为编程**:编程是指通过编写代码来告诉计算机执行特定任务的过程。这包括定义数据结构、算法逻辑、输入输出操作等。 - **什么是Java**:Java是一种广泛使用的高级编程...

    java面向对象程序设计基础知识总结.zip

    这一基础知识总结涵盖了类、对象、封装、继承、多态等关键概念,是学习和掌握Java编程的重要基石。 1. 类与对象:在Java中,一切皆为对象,而类是创建对象的模板。类定义了对象的状态(属性)和行为(方法)。例如...

Global site tag (gtag.js) - Google Analytics