在Java中,属性类如何为其“父”类调用方法?
我正在开发一个Android应用程序 对于某些任务,我有一个activity parentActivity和一个子类 我在parentActivity中还有一个隐藏的文本视图。我想从子类中显示这个textView,但我不知道怎么做 我想我可以从子类调用parentActivity方法。我该怎么做在Java中,属性类如何为其“父”类调用方法?,java,android,events,Java,Android,Events,我正在开发一个Android应用程序 对于某些任务,我有一个activity parentActivity和一个子类 我在parentActivity中还有一个隐藏的文本视图。我想从子类中显示这个textView,但我不知道怎么做 我想我可以从子类调用parentActivity方法。我该怎么做 public class ParentActivity extends Activity { private SomeClass mSomeClass; ... } 我想从mSomeCl
public class ParentActivity extends Activity
{
private SomeClass mSomeClass;
...
}
我想从mSomeClass调用ParentActivity
在C语言中,我使用事件监听器来实现这一点
我需要更多的细节告诉我
谢谢。如果SomeClass是ParentActivity的非静态内部类,则只能从SomeClass直接调用ParentActivity中的方法
public class ParentActivity {
protected void parentActivityMethod() {
System.out.println( "Method called" );
}
protected class InnerSomeClass { // This could extend SomeClass
protected void callParentMethod() {
parentActivityMethod();
}
// Maybe override SomeClass methods to invoke ParentActivity methods?
}
private InnerSomeClass someClass;
public ParentActivity() {
this.someClass = new InnerSomeClass();
someClass.callParentMethod(); // Will print "Method called"
}
}
这要求在ParentActivity中实例化someClass
public class ParentActivity {
protected void parentActivityMethod() {
System.out.println( "Method called" );
}
protected class InnerSomeClass { // This could extend SomeClass
protected void callParentMethod() {
parentActivityMethod();
}
// Maybe override SomeClass methods to invoke ParentActivity methods?
}
private InnerSomeClass someClass;
public ParentActivity() {
this.someClass = new InnerSomeClass();
someClass.callParentMethod(); // Will print "Method called"
}
}
或者,当实例化SomeClass对象时,可以传递对ParentActivity对象的引用。这还需要编辑SomeClass定义
原来的答案不再适用:
您可以通过super关键字调用super类的方法
一个简单的例子:
public class Parent {
protected String s1;
protected void m1() {
System.out.println( "PARENT M1" );
}
}
public class Child extends Parent {
protected void m1() {
System.out.println( "CHILD M1" );
}
public String doSomething() {
super.m1(); // Prints PARENT M1
m1(); // Prints CHILD M1
return s1; // Same as super.s1 because s1 has not been redeclared
}
public static void main( String args[] ) {
new Child().doSomething();
}
}
如果SomeClass是ParentActivity的非静态内部类,则只能从SomeClass直接调用ParentActivity中的方法
public class ParentActivity {
protected void parentActivityMethod() {
System.out.println( "Method called" );
}
protected class InnerSomeClass { // This could extend SomeClass
protected void callParentMethod() {
parentActivityMethod();
}
// Maybe override SomeClass methods to invoke ParentActivity methods?
}
private InnerSomeClass someClass;
public ParentActivity() {
this.someClass = new InnerSomeClass();
someClass.callParentMethod(); // Will print "Method called"
}
}
这要求在ParentActivity中实例化someClass
public class ParentActivity {
protected void parentActivityMethod() {
System.out.println( "Method called" );
}
protected class InnerSomeClass { // This could extend SomeClass
protected void callParentMethod() {
parentActivityMethod();
}
// Maybe override SomeClass methods to invoke ParentActivity methods?
}
private InnerSomeClass someClass;
public ParentActivity() {
this.someClass = new InnerSomeClass();
someClass.callParentMethod(); // Will print "Method called"
}
}
或者,当实例化SomeClass对象时,可以传递对ParentActivity对象的引用。这还需要编辑SomeClass定义
原来的答案不再适用:
您可以通过super关键字调用super类的方法
一个简单的例子:
public class Parent {
protected String s1;
protected void m1() {
System.out.println( "PARENT M1" );
}
}
public class Child extends Parent {
protected void m1() {
System.out.println( "CHILD M1" );
}
public String doSomething() {
super.m1(); // Prints PARENT M1
m1(); // Prints CHILD M1
return s1; // Same as super.s1 because s1 has not been redeclared
}
public static void main( String args[] ) {
new Child().doSomething();
}
}
mSomeClass不是ParentActivity的子活动。mSomeClass对包含它的类一无所知。这非常清楚地表明您的设计存在严重缺陷。您试图完成的是什么?mSomeClass不是ParentActivity的子活动。mSomeClass对包含它的类一无所知。这非常清楚地表明您的设计存在严重缺陷。您想要完成的是什么?您的家长活动保持不变
public class ParentActivity extends Activity
{
private SomeClass mSomeClass;
}
你的课程需要一些小的变化
class SomeClass extends XYZ
{
ParentActivity parent;
SomeClass(ParentActivity p) //Constructor
{
this.parent = p;
......
}
public void someMethodWhereParentAccessIsRequired()
{
.....
parent.doSomethingOnSomeTextView();
....
}
}
最后,在ParentActivity内初始化mSomeClass时:
mSomeClass = new SomeClass(this)
您的家长活动保持不变
public class ParentActivity extends Activity
{
private SomeClass mSomeClass;
}
你的课程需要一些小的变化
class SomeClass extends XYZ
{
ParentActivity parent;
SomeClass(ParentActivity p) //Constructor
{
this.parent = p;
......
}
public void someMethodWhereParentAccessIsRequired()
{
.....
parent.doSomethingOnSomeTextView();
....
}
}
最后,在ParentActivity内初始化mSomeClass时:
mSomeClass = new SomeClass(this)
我想你对什么是子类感到困惑。给我们看一些代码怎么样。@Falmari:我刚刚添加了一个示例。对不起,我想你对什么是子类感到困惑。给我们看一些代码怎么样。@Falmari:我刚刚添加了一个示例。对不起,对不起,我解释得不太清楚。我刚才在我的问题上加了一个例子。对不起,我解释得不太清楚。我刚刚在我的问题中添加了一个例子。MSOCCELASS是一个OpenGL渲染器,它使用C++来渲染一些东西。从C++中,我可以调用MSOCKLASS中的方法,但是我需要从PARTRONACTION调用一个方法来显示TeXVIEW。如果您是制作mSomeClass的人,并且可以更改构造函数,那么可以按照@Sarwar的建议执行,并将指针传递给父类。只是要小心存储对上下文的引用,因为这可能会导致内存泄漏。但是,在包含特定对象的对象中,没有通用的方法来调用方法。那么侦听器呢?这取决于你的课程。有很多方法可以使对象之间的通信成为可能。但是它与父/子活动无关,它完全取决于你想做什么。MSOCCELASS是一个使用C++来渲染东西的OpenGL渲染器。从C++中,我可以调用MSOCKLASS中的方法,但是我需要从PARTRONACTION调用一个方法来显示TeXVIEW。如果您是制作mSomeClass的人,并且可以更改构造函数,那么可以按照@Sarwar的建议执行,并将指针传递给父类。只是要小心存储对上下文的引用,因为这可能会导致内存泄漏。但是,在包含特定对象的对象中,没有通用的方法来调用方法。那么侦听器呢?这取决于你的课程。有很多方法可以使对象之间的通信成为可能。但它实际上与父/子活动无关,完全取决于你想做什么。