Java程序中,除了普通声明的类外,还有一种叫抽象类,一种叫内部类。今天要说的就是抽象类、内部类,以及Java中的反射机制了!
抽象类:
定义一个名称为Fruit的抽象类
下面就是一个简单的例子:
使用abstract关键字创建抽象类Fruit
创建Fruit类的子类Apple,并实现harvest()方法
创建Fruit类的子类Orange,并实现harvest()方法
定义测试类Farm,在Fruit类中执行两个子类的harvest()方法
内部类:如果在一个类中再定义一个类,就在类中再定义的这个类就叫内部类。内部类可以分为成员内部类、局部内部类以及匿名内部类。
成员内部类:
创建OuterClass类,在类中定义innerClass内部类和doin()方法,在主方法中创建OuterClass类的实例对象并调用doit()方法。
从上图可以看出,内部类对象与外部类对象关系非常密切,内外可以交互使用彼此类中定义的变量。
注意:如果在外部类和非静态方法之外实例化内部类对象,需要使用“外部类.内部类”的形式指定该对象的类型。
在上面的程序中的方法中如果不使用doit()方法返回内部类对象引用,可以直接使用内部类实例化内部类对象,但由于是在主方法中实例化内部类对象,必须在new操作符之前提供一个外部类的引用 。
如下面:在主方法中实例化一个内部类对象:
使用this关键字获取内部类与外部类的引用,如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字
创建TheSameName类,在类中定义成员变量x,定义一个内部类Inner,并在内部类中也创建x变量,在内部类的doit()方法中分别操作两个x变量。
局部内部类:
局部内部类是指在类的方法中定义的内部类,它的使用范围也是在这个方法体内。下面一个例子说明如何定义局部内部类。
在外部类的sell()方法中创建Apple局部内部类,然后创建该内部类的实例,并调用其定义的price()方法输出单价信息。
在上述代码中可以看到,内部类定义在sell()方法内部。但是有一点值得注意,内部类Apple是sell()方法的一部分,并非SellOutClass类的一部分,所以在sell()方法的外部不能访问该内部类,但是该内部类可以访问当前代码块的常量以及此外部类的所有成员。
匿名内部类:
在编写程序代码时,不一定要给内部类取一个名字,可以直接以对象名来代替。匿名内部类的所有实现代码都需要在大括号之间进行编写。
在main()方法中编写匿名内部类去除字符串中的全部空格。
编写接口IStringDeal,在该接口中声明一个方法filterBlankChar(). 代码如下:
public interface IStringDeal
{
public String filterBlankChar();
}
静态内部类:
内部类的继承:
Class类与Java的反射机制:
通过Java反射机制,可以在程序 中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。Java反射机制的功能十分强大,在java.lang.reflect包中提供了对该功能的支持。众所周知,所有Java类均继承了Object类,在Object类中定义了一个getClass()方法,该方法返回一个类型为Class的对象。代码如下 :
Class textFieldC = textField.getClass();
访问成员变量:
访问方法:
以上就是反射机制的一些知识 了,今天就写到这吧,谢谢大家浏览,有什么错误的地方欢迎大家指正,谢谢,祝大家周末愉快!
获得更多相关资讯可以关注西安华美校区,就会获得java零基础教程!额外附送excel教程!另外求关注,你们的关注是小编继续的动力!谢谢!