内部类
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类
内部类和外层封装它的类之间存在逻辑上的所属关系
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。 Inner class的名字不能与包含它的类名相同;
Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;
内部类能够访问创建它 的对象的实现,包括私有成员(能访问定义内部类的类的私有成员方法和成员变量)
内部类能够隐藏起来,不为同一包中的其他类所见(在内部类的访问修饰符用private)
使用内部类在编写事件驱动程序时很方便.
普通内部类(成员内部类)
静态嵌套类(静态内部类)
局部内部类
匿名内部类:没有名字的内部类,这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适
成员内部类(普通内部类):
格式:
class 外部类名{
访问修饰符 修饰符变量类型 变量名称;
访问修饰符 修饰符返回值类型 成员方法名称(参数列表){方法体}
访问修饰符 class 内部类名称{
访问修饰符修饰符 变量类型 内部类成员变量名称;
访问修饰符修饰符 返回值类型 内部类成员方法名称(参数列表){方法体}
}
}
实例化成员内部类格式:
1.类中
内部类名 pic = new内部类名();//同一个类中实例化内部类
2.类外部:
外部类名变量1 = new外部类名();
外部类名.内部类吗名变量2 = 变量1.new内部类名();//类外部:实例化成员内部类 固定格式
静态内部类
Public class 外部类名{
访问修饰符 修饰符变量类型 变量名称;
访问修饰符 修饰符返回值类型 成员方法名称(参数列表){方法体}
访问修饰符 staticclass 内部类名称{
访问修饰符修饰符 变量类型 内部类成员变量名称;
访问修饰符修饰符 返回值类型 内部类成员方法名称(参数列表){方法体}
}
}
实例化成员内部类格式:
1.类中
内部类名 pic = new内部类名();//同一个类中实例化静态内部内部类
2.类外部:
外部类名.内部类吗名变量2 = new外部类名.内部类名();//类外部:实例化静态内部类 固定格式
局部内部类(定义类中的方法体中,作用范围就只在此方法体中):
格式:
Public class 外部类名{
访问修饰符 修饰符变量类型 变量名称;
访问修饰符 修饰符返回值类型 成员方法名称(参数列表){
class 局部内部类名称{
变量类型 内部类成员变量名称;
返回值类型 内部类成员方法名称(参数列表){方法体}
}
局部内部类名 变量 = new 局部内部类名();//只能在此方法中实例化此局部内部类对象
}
}
匿名内部类
publicclass Person {
intage;
String name;
publicvoid meth(){
System.out.println("meth");
}
}
publicclass Student extends Person {
intage=10;
String name="zhangsan";
publicvoid meth(){
System.out.println("我是匿名内部类中的方法");
}
}
publicstaticvoid main(String[] args) {
Person p = new Person(){//匿名内部类
intage=10;
String name="zhangsan";
publicvoid meth(){
System.out.println("我是匿名内部类中的方法");
}
};
p.meth();
System.out.println(p.name);
Person p1 = new Student();//类名:Student
p1.meth();
System.out.println(p1.name);
}
反射:
// //反射
try {
Class class1 = Class.forName("com.etc.classreflection.Dog");//加载此路径的这个类*
System.out.println(class1.getName());//获取类全路径名称
Dog dog = (Dog)class1.newInstance();//构建此类的一个实例*
//等价
//Dog dog = new Dog();
// dog.meth();//调用此实例的方法
Method[] dm = class1.getMethods();
for(Method m:dm){
System.out.println("方法名称"+m.getName());
if(m.getName().equals("meth")){
m.invoke(dog, args);// 调用此类中的具体方法*
}
}
} catch (Exception e) {
e.printStackTrace();
}
什么是封装类
基本数据类型以类的形式体现
基本数据类型 | 封装类 |
boolean byte short int long char float double | Boolean Byte Short Integer Long Character Float Double |