java之内部类
Posted 西西嘛呦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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之内部类的主要内容,如果未能解决你的问题,请参考以下文章