看了点视频和文章,对内部类有了点认识。按照自己的理解摘抄和备注一下。
**成员内部类:**成员内部类是外围类的一个成员,是 依附于外围类的,所以,只有先创建了外围类对象才能够创建内部类对象。也正是由于这个原因,成员内部类也不能含有 static 的变量和方法;
**静态内部类:**静态内部类,就是修饰为 static 的内部类,该内部类对象 不依赖于外部类对象,就是说我们可以直接创建内部类对象,但其只可以直接访问外部类的所有静态成员和静态方法;
**局部内部类:**局部内部类和成员内部类一样被编译,只是它的 作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效;
**匿名内部类:**定义匿名内部类的前提是,内部类必须要继承一个类或者实现接口,格式为 new 父类或者接口(){定义子类的内容(如函数等)}。也就是说,匿名内部类最终提供给我们的是一个匿名子类的对象。
(其实就是说子类和实现类就没有类或者说没有起名字,直接弄出来子类的对象和实现类的对象)
上面这些可以分2种:
(1) 在类中定义一个类(成员内部类,静态内部类);
(2) 在方法中定义一个类(局部内部类,匿名内部类)。
内部类在实际生活中是存在的,比如:笔记本是一个类,那么笔记下的cpu也可以是一个类。这就是在类中还存在一个类。
java当中内部类的作用可以起到隐藏的作用。可以隐藏内部类。外部调用访问的时候,可以不知道有内部类的存在。
package com.lwh;
public interface Jumpping {
void jump();
}
package com.lwh;
public class JumppingOperatro {
public void method(Jumpping j){
j.jump();
}
}
package com.lwh;
public class Cat implements Jumpping {
@Override
public void jump() {
System.out.println("猫跳高了");
}
}
package com.lwh;
public class Dog implements Jumpping {
@Override
public void jump() {
System.out.println("狗跳高了");
}
}
package com.lwh;
public class JumppingDemo {
public static void main(String[] args){
JumppingOperatro jo = new JumppingOperatro();
Jumpping j = new Cat();
jo.method(j);
Jumpping j2 = new Dog();
jo.method(j2);
jo.method(new Jumpping(){
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
});
jo.method(new Jumpping(){
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
});
}
}
这样就无需建立多个动物的类实现这个Jumpping()的接口类。直接用匿名的内部类很快解决。匿名内部类的整体是看做一个对象而已。是继承了父类或者实现了接口的一个类的对象。只不过这个类不出现,直接出来对象。