Java面向对象10——内部类知识点总结

简介: Java面向对象10——内部类知识点总结

一、前言


本文将讲述有关内部类的知识点


二、内部类定义


内部类:在一个类的里面再定义一个类


public class Outer{
  public class Inner{
  ···
  }
}


三、内部类简单应用


需求:写一个JavaBean类描述汽车

属性:汽车品牌、颜色,发动机品牌、使用年限


这时候我们定义成员属性的时候,除了carName、carColour,还有engineName、engineAge如果我们写一个Car类的话,后面两个属性就没办法定义在这个类中,只能重新写一个Engine类,但是由于发动机又是车的一部分,所以要把Engine类放到Car类中,这时候Engine类就是内部类了


public class Car{
  String carName;
  String carColour;
  class Engine{
    String engineName;
    int engineAge;
  }
}


四、内部类特点


  • 外部类一部分
  • 单独出现没有意义
  • 可以直接访问外部类成员,私有化成员变量也可以访问
  • 外部类不能直接访问内部类对象,要先创建对象


五、内部类分类


  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类(重点使用)


六、成员内部类


1.书写


  • 写在成员位置,属于外部类的成员
  • 可以被修饰符修饰


2.创建成员内部类对象


  • 当成员内部类被private修饰时,在外部类中编写方法,对外提供内部类对象
  • 直接创建


外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();


3.获外部类成员变


out.this.变量名


4.实例


public class Outer{
  private int a = 10;
  class Inner{
    int a = 20;
    System.out.println(Outer.this.a);
    System.out.println(this.a);
    System.out.println(a);
  }
}


输出的结果为:10、20、30


5.内存图


4dba8fddc06449809e731ec67792de4a.png


静态内部类


1.特点


  • 静态内部类是一种特殊的成员内部类
  • 有static修饰,属于外部类本身的
  • 总结:静态内部类与其他类的用法完全一样。只是访问的时候需要加上外部类.内部类


2.注意点


  • 可以直接访问外部类的静态成员
  • 不可以直接访问外部类的非静态成员,如果要访问需要创建外部类的对象
  • 静态内部类中没有Outer.this


3.使用格式


外部类.内部类


4.静态内部类对象的创建格式


外部类.内部类  变量 = new  外部类.内部类构造器;


5.调用方法的格式


  • 调用非静态方法的格式:先创建对象,用对象调用
  • 调用静态方法的格式:外部类名.内部类名.方法名()


八、局部内部类


1.定义


  • 定义在方法中的类

2.格式


class 外部类名 {
  数据类型 变量名;
  修饰符 返回值类型 方法名(参数列表) {
    // …
    class 内部类 {
      // 成员变量
      // 成员方法
    }
  }
}


九、结语


下一篇文章中我们将介绍匿名内部类相关知识点,也是在编写程序时非常重要的一个知识

相关文章
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
23 2
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
35 4
|
3月前
|
Java
接口和抽象类【Java面向对象知识回顾②】
本文讨论了Java中抽象类和接口的概念与区别。抽象类是不能被实例化的类,可以包含抽象和非抽象方法,常用作其他类的基类。接口是一种纯抽象类型,只包含抽象方法和常量,不能被实例化,且实现接口的类必须实现接口中定义的所有方法。文章还比较了抽象类和接口在实现方式、方法类型、成员变量、构造方法和访问修饰符等方面的不同,并探讨了它们的使用场景。
接口和抽象类【Java面向对象知识回顾②】
|
2月前
|
安全 Java 编译器
Java基础-知识点(二)
Java基础-知识点(二)
13 0
|
2月前
|
存储 缓存 安全
Java基础-知识点(一)
Java基础-知识点(一)
19 0
|
2月前
|
存储 Java 程序员
Java基础-面向对象
Java基础-面向对象
17 0
|
2月前
|
Java 编译器
【Java】内部类
【Java】内部类
22 0
|
3月前
|
Java 开发者
Java 面向对象
Java 是一种面向对象的编程语言,通过对象与类的概念组织代码和数据。面向对象编程的核心包括类、对象、继承、多态、封装和抽象。类是对象的蓝图,定义了属性和行为;对象则是类的实例。继承允许子类继承父类的属性和方法,增强代码复用性;多态则支持通过相同接口调用不同类型对象的行为,包括方法重载和重写。封装通过公共方法隐藏对象细节,提高安全性;抽象则对对象特征进行提炼,通过抽象类和接口实现。理解这些概念有助于设计高效、可维护的 Java 应用程序。
|
14天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####