开心一笑
快速成长
我大学刚毕业来这家公司面试的时候,老板语重心长的对我说:虽然薪水不多,
但是你可以在这里获得快速的成长,这对年轻人来说是最重要的。现在,两年过去了,
老板没有骗我,我看起来已经像是40岁的人了
提出问题
之所以写这篇文章,是因为今天在工作中确实碰到这个问题,才明白,要获得如果一个类继承其他类,要获得该类及其所有的超类的属性和方法,需要下面这么做:哈哈,语言太朴素...
解决问题
定义一个祖父类,有姓名和性别个属性:或许有些人到现在,也只能记住离开的祖父的姓名和性别吧!
`` public class GrandFather {
//姓名
private String name;
//性别
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//干农活
public void doFarmWork(){
System.out.println("do do do ...simple life!");
}
}
定义一个父亲类继承祖父
/**
* 描述:父亲
* Created by Ay on 2016/3/17.
*/
class Father extends GrandFather {
private String age;
private String address;
private String phone;
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
最后定义一个儿子类:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;
/**
* 描述:儿子
* Created by Ay on 2016/3/17.
*/
public class Son extends Father {
//身高
private float height;
//体重
private float weight;
public void play(){
System.out.println("play play......");
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
/**
* 测试
* @param args
*/
public static void main(String[] args){
Son student = new Son( );
// 获取属性
Map<String,Field> map = getClassFields (student.getClass ( ),true );
for ( Object key : map.keySet ( ) ){
System.out.println ( "<field=" + key.toString ( ) + "> <Type=" + map.get ( key ) + ">" );
}
// 获取方法
List< Method > methods = getMothds ( student.getClass ( ), true );
for ( Method method : methods ){
System.out.println ( method.getName ( ) );
}
System.out.println ( "方法总数:" + methods.size ( ) );
}
/**
* 获取类实例的属性值
* @param clazz
* 类名
* @param includeParentClass
* 是否包括父类的属性值
* @return 类名.属性名=属性类型
*/
public static Map<String,Field> getClassFields(Class clazz,boolean includeParentClass ){
Map<String,Field> map = new HashMap<String,Field>();
//返回Class 对象所表示的类或接口的指定已声明字段
Field[] fields = clazz.getDeclaredFields();
for(Field field:fields){
//将字段名作为key,field作为value
map.put(field.getName(),field);
}
if (includeParentClass){
//clazz.getSuperclass()
// 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class
getParentClassFields(map,clazz.getSuperclass());
}
return map;
}
/**
* 获取类实例的父类的属性值
* @param map
* 类实例的属性值Map
* @param clazz
* 类名
* @return 类名.属性名=属性类型
*/
private static Map<String,Field> getParentClassFields(Map<String,Field> map, Class clazz){
Field[] fields = clazz.getDeclaredFields ();
for(Field field:fields){
map.put (field.getName(),field);
}
if(clazz.getSuperclass() == null){
return map;
}
//不断调用getParentClassFields(),知道没有父类为止
getParentClassFields(map,clazz.getSuperclass());
return map;
}
/**
* 获取类实例的方法
* @param clazz
* 类名
* @param includeParentClass
* 是否包括父类的方法
* @return List
*/
public static List<Method>getMothds (Class clazz, boolean includeParentClass )
{
List<Method> list = new ArrayList< Method >();
Method[] methods = clazz.getDeclaredMethods ();
for (Method method : methods){
list.add (method);
}
if (includeParentClass){
getParentClassMothds (list,clazz.getSuperclass());
}
return list;
}
/**
* 获取类实例的父类的方法
* @param list
* 类实例的方法List
* @param clazz
* 类名
* @return List
*/
private static List<Method> getParentClassMothds(List<Method> list, Class clazz){
Method[] methods = clazz.getDeclaredMethods();
for(Method method : methods){
list.add(method);
}
if(clazz.getSuperclass() == Object.class){
return list;
}
getParentClassMothds(list,clazz.getSuperclass());
return list;
}
}
感悟
- 最近太忙,说好的要坚持写博客,可就是因其他琐事给占用了,但会坚持写下去,自己说过的承诺,就应该去履行
- 最近发生太多事,渐渐的才明白自己太弱了,但是时刻提醒自己,坚强点,懦弱给谁看......
- 成长需要慢慢积累,我只是一个还未入门的程序员,很多内容都有借鉴高手的,人生就是这样,先模仿别人,慢慢的有自己的想法,就可以创造出新的事物.....