文档介绍:JAVA基础
如何获得数组的长度?
访问修饰符"public/private/protected/缺省的修饰符”的使用类?
public :公共,均可访问
private:私有的,.
protected:.
缺省,friendly :当前类,同一个包,都可以访问.
作用域当前类
同一 package子孙类 其他package
public
4
V
V
A
protected
V
V
A
X
friendly
寸
X
X
private
X
X
X
Inner Class
(匿名内部类)是否可以extends(继承)其它类,是否可以
implements(实现)interface(接 口)?
匿名内部类是没有名字的内部类,不能继承其它类,但一个内部类可以作为一个接口,由另一 个内部类实现.
一、 山于匿名内部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须 完全借用父类的构造函数来实例化,换言之:匿名内部类完全把创建对象的任务交给了 父类去完成。
二、 在匿名内部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神 奇效果,如上例所示。这是多态性的体现。
三、 因为匿名内部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名内 部类对象引用的变量类型一定是它的直接或间接父类类型。
new〈类或接口>〈类的主体〉
匿名类
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一 部分来声明它们。
这就要采用另一种形式的new语句,如下所示:
new〈类或接口 >〈类的主体〉
这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一 个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展 的类和要实现的接口是new语句的操作数,后跟匿名类的主体。
如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这 和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口 的方法。
注意匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一 个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
从技术上说,匿名类可被视为非静态的内部类,所以它们具有和方法内部声明的非静态 内部类一样的权限和限制。
如果要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能是所需的类过 于简单,或者是由于它只在一个方法内部使用),匿名类就显得非常有用。匿名类尤其 适合在Swing应用程序中快速创建事件处理程序。
exp:
return new Contents() {
private int i = 11;
public int value() { return i; }
};
这种奇怪的语法要表达的意思是:“创建从Contents衍生出来的匿名类的一个对象”。由 new表达式返回的句柄会自动上溯造型成一个Contents句柄。匿名内部类的语法其实要 表达的是:
class MyContents extends Contents {
private int i = 11;
public int value() ( return i; }
}
return new MyContents();
若试图定义内部类,并想使用在匿名内部类外部定义的一个对象,则编译器要求外部对象 必须是final属性.
public class Parcel9 {
public Destination
dest(final String dest, final float price) (
return new Destination() (
private int cost;
// Instance initialization fbr each object:
{
cost = (price);
if(cost > 100)
System. (”Over budget!");
}
private String label = dest;
public String readLabel() ( return label; }
public static void main(String[] args) { Parcel9 p = new Parcel9();
Destination d =