如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)
1.普通内部类:注意调用的方法【外部类不能是抽象类和接口】
//外部类
class Out {
private int age = 12;
//内部类
class In {
public void print() {
System.out.println(age);
}
}
}
public class Demo {
public static void main(String[] args) {
Out.In in = new Out().new In();
in.print();
}
}
2.匿名内部类:注意结构======>注意 这个父类构造器可以是 抽象类
new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}
匿名内部类调用两种方式
package lianxi;
public class Lianxi {
public static void main(String[] args) {
/*====>这种构造方法可以实现父类中没有的方法实现调用
* new Dongwu() {
public void xiuxi() {
System.out.println("看看这个地方");
};
public void xiuxi1() {
System.out.println("看看这个那地方");
};
}.xiuxi1();*/
Dongwu d = new Dongwu() {
//这种方法只能对外类的方法进行重写 不然调用的时候会报错
public void xiuxi() {
System.out.println("看看这个地方");
};
};
d.xiuxi();
}
}
abstract class Dongwu{
public static int age = 10;
public void chi() {
System.out.println("吃肉");
}
abstract void xiuxi();
}
class Dog extends Dongwu{
public void xiuxi() {
System.out.println("娱乐项目"+Dongwu.age);
}
public void wan() {
System.out.println("娱乐玩项目"+Dongwu.age);
}
}
3.静态内部类=====>注意调用方法
class Out {
private static int age = 12;
static class In {
public void print() {
System.out.println(age);
}
}
}
public class Demo {
public static void main(String[] args) {
Out.In in = new Out.In();
in.print();
}
}
4.方法内部类(局部内部类)====》了解 就可 据说不常用
方法内部类 中不能用限制符修饰(如 public)
class Out {
private int age = 12;
public void Print(final int x) {
class In {
public void inPrint() {
System.out.println(x);
System.out.println(age);
}
}
new In().inPrint();
}
}
public class Demo {
public static void main(String[] args) {
Out out = new Out();
out.Print(3);
}
}
5.
在上面的代码中,我们将内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去调用内部类方法
如果此时我们需要往外部类的方法中传入参数,那么外部类的方法形参必须使用final定义
至于final在这里并没有特殊含义,只是一种表示形式而已【这个地方我没遇到过,以后遇到再说【自己测试过几次反正不用final】】
6.内部内传值同样是给内部类定义一个方法 间接改变其他参数
new ActionListener(){
private String innerStr;
@Override
public void actionPerformed(ActionEvent arg0) {
jl.setText(innerStr);
}
public ActionListener accept(String str) {
this.innerStr = str;
return this;
}
}.accept(innerString);