1. 程式人生 > >『ANDROID』反射取子類、父類 屬性

『ANDROID』反射取子類、父類 屬性

原文地址:http://blog.sina.com.cn/s/blog_7cc04ac801012x2v.html

class Person {    
int age = 6;    
public int getInfo() throws Exception {       
return this.age;   
}  
public int getInfo2() throws Exception {       
int result = 0;       
Class clazz = this.getClass();       
Field[] fields = clazz.getDeclaredFields();       
for (Field field : fields) {          
result = Integer.valueOf(field.get(this).toString());       
}     
return result;    
}  
class Student extends Person {    
int age = 5;  
public class Test2 {    
public static void main(String args[]) throws Exception {       
Student s = new Student();       
System.out.print(s.getInfo());       
System.out.print(s.getInfo2());    
}  
}

 輸出結果: 
getInfo返回Person類的age; 
getInfo2返回Student類的age 
Class clazz=this.getClass();這行程式碼得到的類其實是Student, 
如果把這行程式碼改為:Class clazz=Person.class;結果就都返回Person類的age 
說明: 
1)Class.getFields() 方法可以得到本類及其超類的所有可訪問公共欄位(public); 
2)Class.getDeclaredFields()這個方法取得本類所有欄位
如果要獲得父類可以用
Class.getSuperclass()取得其超類,並用Class.getDeclaredFields()取得超類的所有欄位;

相關推薦

ANDROID反射 屬性

原文地址:http://blog.sina.com.cn/s/blog_7cc04ac801012x2v.html class Person {  int age = 6;  public int getInfo() throws Exception {

反射 屬性

class Person { int age = 6; //這裡的變數需要設定成public或default,下面說明原因 public int getInfo() throws Exception { return this.age; } p

各種方法的執行順序

package parentAndChild; /**  * 狗類,繼承動物  */ public class Dog extends Animal{public static void main(String[] args) {Dog Dog = new Dog();Dog.A();}static {Sys

Hibernate教程04——繼承(連結表)

Hibernate教程04——類繼承(子類、父類連結表) 一、簡介 每個類都生成一張表,父類儲存公共資料,子類儲存自己獨有的資料,通過id進行關聯。 父類(Animal)和子類(Pig、Bird)均生

靜態成員變數,建構函式的執行順序

Java程式在初始化工作可以在許多不同的程式碼塊中來完成(例如靜態程式碼塊、建構函式等), 它們的執行順序如下: 父類靜態代變數、 父類靜態程式碼塊、 子類靜態變數、 子類靜態程式碼塊、 父類非靜態變數(父類例項成員變數)、 父類建構函式、 子類非靜態變數(子類例項成員變數

阿裏 Java 手冊系列教程:為啥強制變量名不同?

會有 局部變量 寫法 boolean 實例 lean 示例 控制 多層嵌套 摘要: 原創出處 https://www.bysocket.com 「公眾號:泥瓦匠BYSocket 」歡迎關註和轉載,保留摘要,謝謝! 目錄 父子類變量名相同會咋樣? 為啥強制子類、父類

關於抽象介面之間聯絡的一點點思考

最近稍微理了一下類、普通父類、抽象類、介面之間的聯絡,對它們的理解比之前稍微好了那麼一點。 首先先了解一下什麼是類,在這之前,我們需要了解一下java中物件的概念,其實java這種面向物件的程式語言就是為了描述我們所處的大千世界,那麼java中的物件就是這個世界上一草一木的

反射(ClassConstructorFieldMethod

反射:通過類的Class物件來操作。可以得到屬性物件,方法物件,構造器物件。可以通過Class物件和構造器物件來例項化物件。但是,通過Class物件來例項化時不能傳遞引數,通過構造器時可以傳遞引數。 1.Class類例項化的幾種方式: 可以通過類名.class; 可以通過物

Java中靜態程式碼塊非靜態程式碼塊建構函式的執行順序一覽表

子類Child繼承父類Parent Child child=new Child(); 執行順序如下: ①父類靜態程式碼塊>>②子類靜態程式碼塊>>③父類非靜態程式碼塊>>④父類建構函式>>⑤子類非靜態程式碼塊>>⑥子類

Java原始碼分析——java.lang.reflect反射包解析(三) 動態代理ProxyWeakCache

    代理模式是一個經常被各種框架使用的模式,比如Spring AOP、Mybatis中就經常用到,當一個類訪問另外一個類困難時,可通過一個代理類來間接訪問,在Java中,為了保證程式的簡單性,代理類與目標類需要實現相同的介面。也就是說代理模式起

Java反射框架(一)——介紹Class

目錄 1.介紹 1.介紹 1.1使用反射 反射提供了檢測調節執行在jvm上的應用的執行時行為的能力 反射是非常強力的功能並且可以令應用執行不可能的操作。 反射的常見應用: 反射機制允許應用可以使用外部的使用者自定義的類,即利用

之間的方法過載隱藏重寫與虛方法呼叫

由於子類物件同時“彙集了”父類和子類的所有公共方法,如果子類中某個方法與父類方法的簽名一樣(即方法名和方法引數都一樣),那當通過子類物件訪問此方法時,訪問的是子類還是父類所定義的方法? 總的來說,子類方法與父類方法之間的關係可以概括為以下三種。    擴充(Extend):

ANDROIDSocketTimeoutException和ConnectTimeoutException的區別

原文地址:http://www.cnblogs.com/carlosk/archive/2013/03/12/2956502.html 前幾天伺服器端的產品經理跑來問我是否有做請求超時和響應超時的處理。我一臉迷茫,直接就說:我做了開發這麼久,從不知道什麼是請求超時什麼

A繼承B, A a = new A(); 則B建構函式B靜態程式碼塊B非靜態程式碼塊A建構函式A靜態程式碼塊A非靜態程式碼塊 執行的先後順序是?

(1)子類A繼承父類B, A a = new A(); 則: 父類B靜態程式碼塊->子類A靜態程式碼塊->父類B非靜態程式碼塊->父類B建構函式->子類A非靜態程式碼塊->子類A建構函式 (2)若子類建構函式中顯式的呼叫了父類

關於java介面之間呼叫和強制轉換的關係

如果使用介面的引用去方位它的實現類的方法,那麼一定只能訪問實現類中介面所定義的那個方法,其他的變數和方法是無法訪問的 如果使用父類的引用去訪問子類的方法例如,A是個父類,b繼承了A,那麼如果A did= new b();那麼did只能訪問A類和b類共有的部分,如果想 訪問b

Java中靜態程式碼塊構造方法程式碼塊之間執行順序

【1】幾個概念 靜態程式碼塊 在java中使用static關鍵字宣告的程式碼塊。每個靜態程式碼塊只會執行一次。JVM在載入類時會執行靜態程式碼塊,靜態程式碼塊先於主方法執行。 注意: 靜態程式碼塊不能存在於任何方法體內; 靜態程式碼塊不能直接訪問靜態例項變數和例

C++ 繼承 3--私有派生下的訪問公有私有保護成員

#include <iostream> using namespace std; /*--------------------------------- 10私有派生 ---------------------------------*/ class

利用反射獲取,介面的資訊

1.測試類: package com.example; import com.example.utils.StringUtils; import java.lang.reflect.Field; import java.lang.reflect.Inv

繼承後想要擴展方法

保留 回調 gen obj pcl logs col 父類 sel 1 >>> class PClass(object): 2 def setInfo(self,sex=‘Male‘): 3 self.gender = se

MyEclipse中抽取接口

選項 cli src style eight 抽取 mage all bsp 選中要抽取接口的類-------->Refactor-------->Extact Interface-------->填寫抽取的接口名-------->選擇要抽取的方法