【问题标题】:how to access method? [closed]如何访问方法? [关闭]
【发布时间】:2014-02-26 03:13:25
【问题描述】:

我一直在研究继承和接口,如果我有一个带有参数SomeClass c 的方法并且我使用c.interfaceMethod();,我会得到一个错误。如果我有一个带有参数SomeClass c 的方法,我如何访问这个方法c.interfaceMethod();

public class SomeClass{
    public void someMethod(SomeClass c){

        c.interfaceMethod();      <-- how to access this method?
        //and other methods

        }

}

.

public class someOtherClass extends SomeClass implements someClassInterface{
    @Override
    public void interfaceMethod(){
        System.out.println("something");

    }
}

.

public interface someClassInterface{

    public void interfaceMethod();

}

【问题讨论】:

  • 你不能访问那个方法,它没有在SomeClass中声明。
  • 没有实现 someClassInterface 并且您正在尝试访问未在正确类中定义的方法。请修复您的代码示例。
  • sorry sorry sorry :( 我在打字的时候忘记放工具了...
  • implements 位于 someOtherClass,而不是 SomeClassSomeClass 仍然没有声明 interfaceMethod
  • 由于SomeClass 没有实现interfaceMethod,所以编译器不能让你调用它。您可以尝试将SomeClass 转换为someClassInterface,然后调用此方法,但这仅在c 将是实现someClassInterface 的类的实例时才有效,例如someOtherClass

标签: java inheritance interface composition


【解决方案1】:

你的类 someClass 是你的类 someOtherClass 的超类,所以父类 "Super class""Super class" 一无所知strong>someOtherClass"子类" interfaceMethod() 方法属于 someOtherClass ,它是继承基础之一。 仔细阅读http://docs.oracle.com/javase/tutorial/java/IandI/index.html

【讨论】:

    【解决方案2】:

    您还需要在SomeClass 中实现someClassInterface

    public class SomeClass implements someClassInterface {
    public void someMethod(SomeClass c){
    
        c.interfaceMethod();      <-- now you can access this method
        //and other methods
    
        }
    
    }
    

    【讨论】:

    • 我必须在 SomeClass 中实现 someClassInterface 还是可以在不实现 someClassInterface 的情况下以其他方式完成
    • @Ris,如果你需要避免实现someClassInterface,那么你需要在SomeClass中声明interfaceMethod(),但是这样它总是会在新的interfaceMethod()中执行实现SomeClass 中的方法。意味着它与Someinterface 内部的方法完全不同。
    【解决方案3】:

    您无法访问SomeClasssomeOtherClass类的方法interfaceMethod。您需要创建someOtherClass的对象才能访问它。

    可以更新如下:

    public class SomeClass{
        public void someMethod(someOtherClass c){
    
            c.interfaceMethod();     
            //and other methods
    
            }
    
    }
    

    【讨论】:

    • 我知道你可以用 public void someMethodsomeOtherClass c 做到这一点,但我想看看你是否可以用 SomeClass c 做到这一点
    【解决方案4】:

    如果要在 SomeClass 上定义 interfaceMethod,则必须让 SomeClass 实现 SomeClassInterface。如果只想在子类中实现 interfaceMethod,则必须将 SomeClass 设为抽象。

    所以将你的类声明更改为:

    public abstract class SomeClass implements SomeClassInterface {
        ...
    } 
    

    此外,按照惯例,所有类和接口名称都应以大写字母开头。

    【讨论】:

    • 这正是我想要的……谢谢!
    【解决方案5】:

    您必须进行如下更改才能访问:

    public class SomeClass{
        public void someMethod(someOtherClass c){
    
            c.interfaceMethod();      --> to access this method
            //and other methods
    
            }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2015-02-25
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      相关资源
      最近更新 更多