内部类
类的五大组成:属性,方法,构造器,代码块,内部类
内部类一般没有构造方法
内部类的分类:
定义在外部类局部位置上(比如方法内):
1)局部内部类(有类的名字)
2)匿名内部类(没有名字,重点)
定义在外部类成员(属性或者方法)的位置上的:
1)成员内部类(没有用static修饰)
2)静态内部类(使用static修饰)
局部内部类
例:
class outer {
private int x = 10;
public void fun1() {
//局部内部类通常定义在方法中
class outter{
public void fun2(){
//内部类可以访问外部类的私有属性与私有方法
System.out.println(x);
}
}
}
}
不能添加访问修饰符,但可以用final修饰,修饰后就不可被继承,并仅仅可在定义他的方法或代码块中作用。
匿名内部类!!!!!!:
特点:匿名类没有名字,同时还是一个对象
当一个类只需要用一次后面再也不用了,此时可以使用匿名内部类来简化开发。
例:
class test{
animal a = new animal() {
@Override
public void cry() {
System.out.println("叫。。。");
}
}
}
interface animal{
public void cry();
}
并没有单独用一个类来实现animal接口,直接使用匿名类来完成功能。
系统在创建类之后还会创造一个对象,并且吧地址返回给实例。
例:
class dog {
private String name;
public void dog1() {
System.out.println("我是dog");
}
}
class test{
dog kele = new dog(){
@Override
public void dog1(){
System.out.println("我是dog的子类");
}
};
}
匿名内部类可以直接当参数传递,当这个类你只需要用一次的时候这种方法就会变的简洁
例:
public class test2 {
public static void main(String[] args) {
fun(new IL() {
@Override
public void show() {
System.out.println("show就对了!");
}
});
}
public static void fun(IL il){
il.show();
}
}