java之内部类
时间:2022-07-23
本文章向大家介绍java之内部类,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称,Inner的名字不能与包含它的类名相同;
Inner class可以使用外部类的私有数据,因为它是外部类成员,同一个类的成员之间可以相互访问,而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员。
分类:成员内部类(static成员内部类和非static成员内部类)、局部内部类(不带修饰符)、匿名内部类
Test.java
package fac;
public class Test {
int i;
public int j;
private int k;
class A{
int i;
public void setTestFields() {
Test.this.i = 1;
Test.this.j = 2;
Test.this.k = 3;
}
public void set() {
this.i = 4;
}
public void get() {
System.out.println(this.i);
}
}
public void seInfo() {
new A().setTestFields();
}
public void showInfo() {
System.out.println(this.i);
System.out.println(this.j);
System.out.println(this.k);
}
public static void main(String[] args) {
Test t = new Test();
t.seInfo();
t.showInfo();
Test.A a = t.new A();
a.set();
a.get();
}
}
输出:
1
2
3
4
内部类特性:
- 可以声明为final;
- 和外部类不同,Inner class可声明为private和protected;
- inner class可以声明为static,但此时就不能再使用外层类的非static的成员变量;
- 可以声明为abstract类,因此可以被其它内部类所继承;
内部类的作用是什么?
主要是解决Java不能多重继承。
package fac;
public class Test2 {
public static void main(String[] args) {
//现在类A可以获得类B和类C的方法
A a = new A();
a.testB();
a.testC();
}
}
class A{
public void testB() {
new InnerB().testB();
}
public void testC() {
new InnerC().testC();
}
private class InnerB extends B{
public void testB(){
System.out.println("这是重写之后的B方法");
}
}
private class InnerC extends C{
public void testC(){
System.out.println("这是重写之后的C方法");
}
}
}
class B{
public void testB(){
}}
class C{
public void testC(){
}}
输出:
这是重写之后的B方法 这是重写之后的C方法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ASP.NET MVC+LayUI视频上传
- Linux执行tar解压报错tar: Error is not recoverable: exiting now
- elasticSearch学习(四)
- 在美帝的服务器的prefetch和aspera下载比较
- 全面介绍eBPF-概念
- 在ubuntu20上面安装R4
- 冷饭新炒:理解Snowflake算法的实现原理
- Python基础之算数运算符
- 一文带你领略并发编程的内功心法
- HBase监控
- CVPR19-Deep Stacked Hierarchical Multi-patch Network for Image Deblurring
- HTTP缓存机制与Cookie
- 52. Vue使用watch监听网页的URL变化
- 如何设计一个秒杀系统
- SQL注入之dns回显注入