什么是内部类呢?简单来说内部类就是:一个类中,包含了另一个一个类。
java中内部类的出现主要是为了访问外部类数据的便捷性,一般用于类的设计。
内部类的特点:
内部类可以直接访问外部类的成员,外部类访问内部类,必须建立内部类的对象、
如下是内部类的简单例子:
class Outer {
private int num = 3;
public void method() {
new Inner().show();
}
//将Inner放在Outer类中,Inner就是Outer的内部类
class Inner {
private int num=4;
void show() {
int num=5;
System.out.println(Outer.this.num); //输出外部类的num 3
System.out.println(Inner.this.num);//输出内部类num 4
System.out.println(num); //输出局部变量num 5
}
Outer.Inner in=new Outer().new Inner();
in.show();
Outer.Inner in=new Outer.Inner();
in.show();
package com.whpudu.test;
class Outer{
static int num=5;
static class Inner{
static int num=4;
static void show() {
System.out.println(Outer.num);
System.out.println(Inner.num);
package com.whpudu.test;
class Outer{
void method() {
final int num=3; //java8中默认加了final修饰符
class Inner{
void show() {
System.out.println(num);
}
}
new Inner().show();
}
}
public class OuterInner {
public static void main(String[] args) {
new Outer().method();
}
}
class Fu{
void show() {} ;
}
class Outer{
void method() {
new Fu(){
void show() {
System.out.println("这是复写父类的的方法");
}
}.show();
}
}
public class OuterInner {
public static void main(String[] args) {
}
}
package com.whpudu.test;
class Fu{
void show1() {} ;
void show2() {} ;
}
class Outer{
void method() {
Fu fu=new Fu(){
void show1() {
System.out.println("这是复写父类的show1方法");
}
void show2() {
System.out.println("这是复写父类的show2方法");
}
void show3() {
System.out.println("这是子类特有的方法");
}
};
fu.show1();
fu.show2();
//fu.show3(); 这里要理解多态,我们把子类对象向上转型为Fu类,所有无法再调用子类的特有方法了,这里会报编译错误
}
}
public class OuterInner {
public static void main(String[] args) {
new Outer().method();
}
}
package com.whpudu.test;
class Fu{
void show1() {} ;
void show2() {} ;
}
class Outer{
void method() {
new Fu(){
void show1() {
System.out.println("这是复写父类的show1方法");
}
void show2() {
System.out.println("这是复写父类的show2方法");
}
void show3() {
System.out.println("这是子类特有的方法");
}
{show1();show2();show3();}};
}
}
public class OuterInner {
public static void main(String[] args) {
new Outer().method();
}
}