内部类的继承:
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();
}
}
相关推荐
2. **匿名内部类**: - 匿名内部类没有名字,可以直接实例化一个接口或者继承一个非抽象类。但是,匿名内部类不能继承其他类,但可以实现一个或多个接口。 3. **Static Nested Class 和 Inner Class**: - 静态...
### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高...希望本文能帮助开发者更好地理解和应用Java内部类的相关知识。
【内部类】 内部类是Java中的一种...学习内部类和设计模式能够提高代码的复用性、可维护性和灵活性,是成为专业Java开发人员必备的知识点。通过深入理解和实践这些概念,可以编写出更加高效、易于理解和扩展的代码。
- final用于声明不可改变的属性、方法和类。 - finally是异常处理的关键字,确保代码块无论是否发生异常都会执行。 - finalize是Object类的一个方法,用于垃圾回收时执行资源清理。 8. **Overload与Override的...
### JavaSE基础知识总结 #### 一、Java特点与运行原理 **1.1 Java特点** - **简单性:** Java语言的设计目标之一是易于理解和使用,它的语法清晰、简洁。 - **面向对象:** Java是一种纯面向对象的语言,支持封装...
本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...
需要注意的是,如果外部类和内部类中有同名的成员变量,那么内部类可以通过 `OuterClass.this` 来区分它们: ```java class OuterClass { private int mMem = 10; public class InnerClass { private int mMem ...
- **继承**:允许一个类继承另一个类的属性和方法,从而支持代码重用和类的层次结构构建。 - **多态**:是指一个接口可以有多种不同的实现方式,即同一接口可以被多个类实现或继承。 #### 二、类的定义与成员 - **...
- **继承的传递性**:如果类C继承自类B,类B又继承自类A,那么类C将继承类A和B的所有成员。所有类都间接继承自System.Object类。 - **扩展与保留**:派生类可以扩展基类,但不能移除继承的成员。它能添加新成员,...
总结起来,Java的继承机制允许我们构建类的层次结构,从而实现代码的复用和定制。`super`关键字用于调用父类的构造器、成员变量和方法,而方法覆盖则让我们能根据需要改变子类的行为。理解并熟练运用这些概念对于...
### JAVA基础知识精华总结 #### 对象的初始化 - **非静态对象的初始化**: - 创建对象时,类的所有数据成员会首先进行初始化。 - 基本类型的成员(如`int`型),初始化为0。 - 对象类型的成员会按照它们在类中...
根据给定文件的信息,我们可以总结出以下几个面向对象的基础知识点,并结合具体的题目来进行解析: ### 面向对象基础知识概述 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和处理...
### C++基础知识总结 #### 一、C++数据和变量的类型及变量作用域 **1. 基本的内置类型** C++提供了一系列基本的内置数据类型,用于存储不同种类的数据。以下是一些常见的类型及其特点: - **布尔型 (`bool`)**:...
### Java第六章类和对象知识点总结 #### 一、面向对象的基本概念 1. **面向对象的三大特征**: - **封装**:封装是指隐藏对象的属性和实现细节,只对外提供公共访问方式。 - **继承**:继承使得一个类(子类)...
内部类是定义在另一个类内部的类,包括成员内部类、局部内部类、匿名内部类等,可访问外部类的私有属性和方法。 6. 集合框架 Java集合框架提供了一组数据结构和算法,如List、Set、Map等接口及其实现类,如...
#### 6-2 Object类 - **Object类**: 是所有Java类的根类,所有自定义的类都直接或间接地继承自Object类。 - **常用方法**: - `equals(Object obj)`: 判断两个对象是否相等。 - `toString()`: 返回对象的字符串表示...
### Java面向对象知识点总结 #### 1. 类与对象 **1.1 类** - **概念**: 类是用来描述一类事物的共性内容的抽象模型。 - **创建**: 创建类时,需要考虑该类所描述的对象应该具备哪些属性(特征)和行为(功能)。 ...
继承允许创建新的类并继承已有类的属性和方法;多态则是实现灵活和可扩展代码的关键。 7. **重载和覆盖**:方法重载(Overloading)是编译时多态,发生在同一类内,通过不同的参数列表区分不同的方法。方法覆盖...
### Java基础知识总结 #### Java概述 - **何为编程**:编程是指通过编写代码来告诉计算机执行特定任务的过程。这包括定义数据结构、算法逻辑、输入输出操作等。 - **什么是Java**:Java是一种广泛使用的高级编程...
这一基础知识总结涵盖了类、对象、封装、继承、多态等关键概念,是学习和掌握Java编程的重要基石。 1. 类与对象:在Java中,一切皆为对象,而类是创建对象的模板。类定义了对象的状态(属性)和行为(方法)。例如...