第二天:(Java中的三种内部类基础)
内部类:
内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为 Dog 的外部类和其内部定义的名为 Cat 的内部类。编译完成后出现 Dog .class 和 Dog $Cat .class 两类。
一:成员内部类( member inner class):
1.不对外开放,高内聚,保密性强
2.与外部类方法,属性成员同级别
3.不能定义静态变量,可以访问外部类所有成员
成员内部类例子
public class D{
public void hehe(){
system.printIn.out("nanannanan");
}
}
public class W{
class Gg{
public void nani(){
D d = new D();
d.hehe();
system.printIn.out("On shit");
}
}
public void fuck(){
Gg gg = new Gg();
}
public static void main(args []){
W w = new W();
w.fuck();
}
}
二:局部内部类(local inner class):
1.又叫方法内部类,即在方法里面定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。
2.局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。
3.要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。
局部内部类例子
public class TongXingZheng{
public void noPloblem(){
system.printIn.out("安全无证酒后超速驾驶20年");
}
}
public class Q{
public void driver(){
system.printIn.out("老司机要开车了");
class B extends TongXingZheng{
}
new B().noPloblem();
system.printIn.out("没事儿,啦啦啦");
}
public static void main(args []){
Q q = new Q();
q.driver();
}
}
三:匿名内部类(anonymous inner class)
1.类名没有意义,也就是不需要使用到。
2.匿名内部类大括号后面需要加上 分号
3.一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事现或是覆盖。
4.匿名内部类 new后面 的大多数是抽象类或者接口
匿名内部类例子
public interface QinShou {
public vlid workInNight() {
}
}
public abstract class Doctor implements QinShou {
public void workInDay() {
system.printIn.out("白天是教授,教书");
}
}
public class Doctor1 extends Doctor{
public void workInNight(){
system.printIn.out("高度打码,太模糊。。。。");
}
}
public class Test {
public static void main(args []){
Doctot1 doctor1 = new Doctor1();
doctot1.workInDay();
doctor1.workInNight();
Doctor doctor3 = new Doctor(){
public void workInNight(){
system.printIn.out("这个禽兽是个匿名的叫兽");
}
};
doctor3.workInDay();
doctor3.workInNight();
}
}