当前位置: 首页 > news >正文

装饰网站banner/广告推广公司

装饰网站banner,广告推广公司,江苏网站建设案例,济南网站优化收费标准内部类 把类定义在其他类的内部,这个类就叫内部类。 内部类分为:成员内部类、局部内部类。 内部类访问特点: 内部类可以直接访问外部类的成员,包括私有。 外部类访问内部类的成员,必须创建对象。 局部内部类 局部内…

内部类

把类定义在其他类的内部,这个类就叫内部类。
内部类分为:成员内部类、局部内部类。

内部类访问特点:
内部类可以直接访问外部类的成员,包括私有。
外部类访问内部类的成员,必须创建对象。

局部内部类

局部内部类是定义在一个方法或者一个作用域里面的类。

public class Outer {public void function() {//局部内部类Innerclass Inner {public void print() {System.out.println("局部内部类");}}//在局部位置创建内部类对象,调内部类方法,来使用局部内部类功能Inner in= new Inner();in.print();}
}
public class InnerDemo {public static void main(String[] args){Outer out= new Outer();out.function();}
}//输出:局部内部类

什么时候使用局部内部类:
假设Inner这个类只在方法function中创建这个类对象时被使用了一次。(即只在某个方法中需要用那么一下
当遇到这种情况时,可以在一个方法中定义局部类。

匿名内部类

匿名内部类将局部内部类的使用再深入一步。假如只创建这个类的一个对象,就不必命名了

前提:存在一个类(抽象类或具体类都可以)或者接口。
格式

new 类名或者接口名(){重写方法;
};//有个分号哦,这句其实是一个对象

匿名内部类的本质
是一个继承了类或者实现了接口的子类匿名对象。

接口式匿名内部类:

code V1:

//接口
interface Inter {public abstract void show();
}
//采用匿名内部类实现接口
public class OuterInner {public void method(){new Inter(){public void show(){System.out.println("我是匿名内部类");}}.show();  //Note!!分号  这句是一个匿名对象  它实现了Inner接口(重写了show方法)  它是一个实现了接口的子类匿名对象,对象调方法}
}
//测试类
public class AnonymousInnerDemo {public static void main(String[] args){OuterInner o= new OuterInner();o.method();}
}//输出结果:我是匿名内部类

code V2:

//采用匿名内部类实现接口   V2
public class OuterInner {public void method(){Inter i= new Inter(){  //其实是多态Fu f= new Zi();  右边new Inter(){}这一堆是子public void show(){System.out.println("我是匿名内部类");}};//注意分号哦i.show();}}

匿名内部类在开发中的使用

  1. 参数式的匿名内部类:使用比较器排序的TreeSet、TreeMap
    https://blog.csdn.net/u013317445/article/details/82228746 TreeMap比较器排序中用到。采用了匿名内部类重写Comparator的compare方法,也就是实现Comparator接口。
interface Person {public abstract void study();
}
public class PersonDemo {//method的形参是个接口//需要的实参是一个该接口的实现类对象 其实我们在给实参时,就可以用匿名内部类public void method(Person p){p.study();}
}
public class AnonymousInnerDemo {public static void main(String[] args){PersonDemo pd= new PersonDemo();//整个操作中只使用一次,且只需要创建一个实例,就可以将其定义为匿名内部类//参数式匿名内部类//最原始的方式是单独写一个类实现Person接口,在这个类中重写方法。然后创建该类的对象,然后调用方法pd.method(new Person() {@Overridepublic void study() {System.out.println("好好学习");}});}
}

一道题引发的思考

interface Inter{void show();
}class Outer{//补齐该类的代码 令测试类输出为HelloWorld.public static Inter method(){return new Inter(){  //return了一个这样的匿名对象@Overridepublic void show(){System.out.println("HelloWorld.");}};}
}public class Prictice {public static void main(String[] args){Outer.method().show();//Outer.method():类调用方法,说明method是static的//.show():说明点前面有对象——>method有返回值,且返回值为一个对象,且这个对象的类型里面定义了show方法}
}

Outer.method().show(); 这一句代码:
Outer.method():类调用方法,说明method是static的
.show():说明点前面有对象——>method有返回值,且返回值为一个对象,且这个对象的类型里面定义了show方法

相关文章: