java 反射(获取class对象的3种方法)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43599377/article/details/101289676

直接上代码

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("就是打不出来,美滋滋");
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43599377/article/details/101289676