有些人说抽象类只是不能new对象,我在这用反射直接举例好吧
先创建两个实体类User(普通类)和Person(抽象类)
User类:
package com.qf.day21.refilect;
public class User {
private int id;
private String username;
private int age;
public User(){}
public User(int id, String username, int age) {
this.id = id;
this.username = username;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", age=" + age +
'}';
}
private void method(){
System.out.println("私有方法1");
}
private void method2(String string){
System.out.println("私有方法1"+string);
}
}
Person类:
package com.qf.day21.refilect;
public abstract class Person {
private int age;
String name;
public Person(){}
private Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
然后用反射来测试实例化对象:
package com.qf.day21.refilect;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/*
* 通过反射调用构造方法实例化对象
* */
public class Demo05 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
/* //抽象类 ---- 不能实例化对象 出现异常
//1.获取反射对象
Class class1=Class.forName("com.qf.day21.refilect.Person");
//2.通过反射对象获取无参构造方法
Constructor constructor=class1.getDeclaredConstructor();
//3。开启访问权限
constructor.setAccessible(true);
//4.调用方法创建对象
Person person = (Person) constructor.newInstance();
person.setAge();
System.out.println(person);
*/
//普通类----可以创建对象
//1.获取反射对象
Class class1=Class.forName("com.qf.day21.refilect.User");
//2.通过反射对象获取无参构造方法
Constructor constructor=class1.getDeclaredConstructor();
//3。开启访问权限
constructor.setAccessible(true);
//4.调用方法创建对象
User user = (User) constructor.newInstance();
user.setAge(11);
System.out.println(user);
}
}