❶ java中重寫父類方法後,這個方法如何調用父類私有屬性方法
父類的私有屬性和方法是不被子類繼承調用的,如果你非要這么做可以
1、在父類中另外定義protected 的方法操作私有方法,子類調用該方法
2、將私有方法改為protected
3、使用反射,獲取父類所有方法,根據名稱調用
❷ 關於java繼承中調用父類方法的問題
父類中,是static的,不使用super,而是 Quadrangle.draw
如果不是static的,子類中,沒有draw方法,可以省掉;子類中有draw方法,則必需super
❸ java關於子類實例化父類與反射的一個問題
Fruit fruit = new Apple();
首先這句話中,你通過new關鍵字實例化的是Apple的對象,由於Fruit是Apple的父類,因此Fruit類型的引用可以指向Apple類型的對象,並不意味著fruit變數是Fruit類型的對象。
因此,fruit.getClass().getName()的列印結果應該是Apple,我自己也是工作沒兩年,這塊我沒記錯應該是Java多態性的內容,再回頭看看吧。
❹ 求教Java裡面如何反射invoke父類的overriden方法
import java.lang.reflect.Method;
public class InvokeTest {
public static void main(String[] args) {
Class<?> clazz;
Object obj;
try {
InvokeTest it = new InvokeTest();
clazz = Class.forName("com.test.invoke.User");
obj = clazz.newInstance();
Param p = new Param();
p.setMethodName("introction");
p.setParamTypes(new Class<?>[]{String.class,int.class});
p.setParamValuese(new Object[]{"Tom",20});
Object result = it.call(obj, p);
System.out.println(result+"");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 反射方法調用
* @param declareCLass classInstatnce
* @param param 參數設置類
* @return
* @throws Exception
*/
public Object call(Object declareCLass, Param param) throws Exception {
Class<?> clazz = declareCLass.getClass(); //獲取class對象
String name = param.getMethodName(); //從param類中獲取調用方法名
Class<?>[] methodParamTypes = param.getParamTypes(); //從param類中獲取調用方法參數類型
Object[] objs = param.getParamValuese(); //從param類中獲取調用方法參數值
Method method = clazz.getDeclaredMethod(name, methodParamTypes); //通過class對象獲取對應的方法
return method.invoke(declareCLass, objs); //invoke調用方法,傳入 classInstance、 參數值
}
}
/**
* 參數設置類
* @author Administrator
*
*/
class Param {
private String methodName;
private Class<?>[] paramTypes;
private Object[] paramValuese;
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public Class<?>[] getParamTypes() {
return paramTypes;
}
public void setParamTypes(Class<?>[] paramTypes) {
this.paramTypes = paramTypes;
}
public Object[] getParamValuese() {
return paramValuese;
}
public void setParamValuese(Object[] paramValuese) {
this.paramValuese = paramValuese;
}
}
class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("called method setName value = " + name);
}
public int getAge() {
return age;
}
public void setAge(int age) {
System.out.println("called method setAge value = " + age);
this.age = age;
}
public String introction(String name,int age){
return "My name is "+name+". I'm "+age+" years old.";
}
}
❺ java 反射 訪問父類私有成員
可以看看這個 但是跟反射沒什麼關系。
利用多態,子類雖然訪問不了父類的私有變數,但是可以通過方法訪問,see
class a{
private int i = 11;
public void show(){
System.out.println(i);
}
}
class b extends a{
private int j= 12;
public static void main(String[] args){
a aa = new b();
aa.show();
}
}
❻ Java 里怎麼調用父類的父類的方法
如果該方法沒有被子類及其父類重寫的話,直接用子類對象就可以調用了,如:child.getName();
只要兩者有一個重寫了,就必須用super.super來調用:super.super.getName();
class A{
public void print(){
System.out.println("I am class A.");
}
public void print(String name){
System.out.println("Hello "+name+", I am class A.");
}}
class Aa extends A{
public void printInfo(){
super.print("SubClass");
}
}
❼ Java裡面,反射父類裡面數字類型欄位,怎麼set值
你在invoke反射方法時。這個你要調用父類的構造方法或者set方法來賦值。就可以的。
❽ java 怎麼在子類中調用父類方法
main方法中是可以的,父類是不能調用子類
的方法的。跟你說底層實現你也不懂,從面向對象上來說吧。
父類先於子類存在,子類從父類中生出來,所以子類知道父類,可以調用父類方法。但父類不知道子類,子類可以任意的出生,只要你願意,所以父類無法調用子類,他不知他會有這樣的子類,也不知有多少個子類,但子類的父類是唯一的。
簡單點就是在java中父類是不能調用子類的方法的。
❾ java中調用父類構造方法
非靜態的變數在別的類裡面是不能直接用的。。若要使用的話,就要通過實例化該父類,通過【實例名.屬性名】來訪問、、、你自己看一下把!! class
Point{
int
x,y;
static
int
c;
public
Point(int
m,int
n){
x=m;
y=n;
System.out.println("帶參數的父類給實例化了。x:"+x+"
y:"+y);
}
public
Point(){
c++;
System.out.println("第"+c+"次被創建子類對象");
}
}
public
class
Point3D
extends
Point{
public
static
void
main(String
[]
args){
Point
m1=new
Point3D();
Point
m2=new
Point3D();
Point
m3=new
Point3D();
System.out.println(Point.c);
Point
m4
=
new
Point(7
,
5);
System.out.println("父類x屬性的值為:"+m4.x);
System.out.println("父類y屬性的值為:"+m4.y);
}
}