版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
直接上代码
package com;
//反射--->获取class对象的3种方法
public class Damo2 {
public static void main(String[] args) {
//方式1
printLearnDetail("com.Teacher");
//方式2
printLearnDetail(Teacher.class);
printLearnDetail(Cat.class);
//方式3
Animal animal=new Cat();//因为传入的 是接口,不能直接实例化,只能实例化其对象
printLearnDetail(animal);
}
//方式3:对象加getClass的方式
public static void printLearnDetail(Animal animal) {
Class clazz=animal.getClass();
//再new一个对象
try {
Animal animal2=(Animal) clazz.newInstance();
animal2.learn();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//Class 的定义方式2:Teacher.class Cat.class
public static void printLearnDetail(Class clazz) {
//拿到Teacher的类型
try {
Animal animal=(Animal)clazz.newInstance();
animal.learn();
} catch (Exception e) {
}
}
//class定义方式一:具体地址
public static void printLearnDetail(String classPath) {
//拿到Teacher的类型
try {
Class animalClass=Class.forName(classPath);
Animal animal=(Animal)animalClass.newInstance();//向下转型
animal.learn();
} catch (Exception e) {
e.printStackTrace();
}
}
}
interface Animal{
public void learn();
}
class Teacher implements Animal{
public void learn() {
System.out.println("认真学习打飞机");
}
}
class Cat implements Animal{
public void learn() {
System.out.println("就是打不出来,美滋滋");
}
}