标签:apple 不能 实例 public 另一个 play student pack 格式
一、匿名对象
匿名对象是没有名字的实体,也就是该实体没有对应的变量名引用
匿名对象的特征:
package com.yyx.pratice; public class AnonymousObject { public static void main(String[] args) { printStuInfo(new Student("张三", 2567));//传递匿名对象 } public static void printStuInfo(Student student) { System.out.println(student.getStuName() + " " + student.getStuId()); } } class Student { private String stuName; private Integer stuId; public Student(String stuName, Integer stuId) { super(); this.stuName = stuName; this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public Integer getStuId() { return stuId; } public void setStuId(Integer stuId) { this.stuId = stuId; } }
二、匿名类
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。匿名类相当于在定义类的同时再新建这个类的实例
定义匿名内部类的格式如下:
new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。
要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,
这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态内部类一样的权限和限制。
如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用
匿名类特点:
匿名内部类还有如下两条规则:
匿名类里面不可以有的东西:
匿名类中可以包含的东西有:
package com.yyx.pratice; public class AnonymousObject { public static void main(String[] args) { AllBehaviors allBehaviors = new AllBehaviors() { @Override public void walk() { System.out.println("我在走路!"); } @Override public void play() { System.out.println("我在玩!"); } }; allBehaviors.play(); allBehaviors.walk(); } } interface AllBehaviors { void play(); void walk(); }
三、匿名对象和匿名类区别
1.匿名对象还是一个对象,它必须有已经写好的成员变量、属性、方法
2.匿名类,在声明它的对象的时候,才对它进行代码的构造(封装它的成员变量、属性、方法等)
3.匿名对象:一个对象只需要使用一次的时候,通常使用匿名对象
4.匿名类:比如我们需要一个监听类,并且在实例化这个监听类的时候才需要实现这个监听类内部的方法,那么使用匿名类就最方便了
标签:apple 不能 实例 public 另一个 play student pack 格式
原文地址:https://www.cnblogs.com/qq1312583369/p/10966603.html