从@Override注释的javadoc:
指示方法声明旨在覆盖超类中的方法声明.如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息.
当我想测试一个类型的特定方法并替换我的测试主题调用的其他方法的行为时,我倾向于在测试中使用@Override注释.我的一位同事坚信,这不是一个有效的用途,但不确定原因.任何人都可以建议为什么要避免它?
我在下面添加了一个示例来说明我的用法.
对于测试对象Foo:
public class Foo {
/**
* params set elsewhere
*/
private Map<String, String> params;
public String doExecute(Map<String, String> params) {
// TODO Auto-generated method stub
return null;
}
public String execute() {
return doExecute(params);
}
}
Run Code Online (Sandbox Code Playgroud)
我会定义一个这样的测试:
public void testDoExecute() {
final Map<String, String> expectedParams = new HashMap<String, String>();
final String expectedResult= "expectedResult";
Foo foo = new Foo() {
@Override
public String doExecute(Map<String, String> params) {
assertEquals(expectedParams, params);
return expectedResult;
}
};
assertEquals(expectedResult, …Run Code Online (Sandbox Code Playgroud) //src/com/test/animal/Animal.java
package com.test.animal;
public class Animal
{
Animal()
{
init();
}
public void init()
{
System.out.println("parent init()");
}
}
//src/com/test/animal/Dog.java
package com.test.animal;
public class Dog extends Animal
{
String name = null;
Dog()
{
super();
}
public void init()
{
System.out.println("child init()");
super.init();
name = new String("dog");
System.out.println("name: "+name);
}
public static void main(String[] args)
{
Dog d = new Dog();
System.out.println("name: "+d.name);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
child init()
parent init()
name: dog
name: null
Run Code Online (Sandbox Code Playgroud)
似乎调用了子中的init(),但是没有保存NAME值!为什么?如果我将NAME移动到父级,那就没关系.然而,保留在孩子身上更合理,因为它是特定于狗的.
另外,我可以在child的构造函数中显式调用init()来解决这个问题.这不是那么好.
假设我在runnable中有这个方法.我总是删除@override.但我想知道这是否有任何负面影响?我试图搜索但没有找到任何东西.
@Override
public void run() {
while (running) {
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法禁止子类在java中调用超类的公共方法?
例如
public abstract class TObject{
abstract public void quark();
}
public class Animal extends TObject{
public void quark(){
System.out.println("this is the animal");
}
}
public class Dog extends Animal{
@overide
public void quark(){
System.out.println("this is the animal");
**super.quark();**
}
}
In this example, The Dog call the **super.quark();** in it's quark method.
Run Code Online (Sandbox Code Playgroud)
但我不希望狗可以打电话给super.quark(); 我也不想改变
动物到私人夸克方法的修饰语.有没有办法在编译中防止这种情况?
我有几天困惑,谁能帮助我........
我这样做的原因是我在开发hudson scm插件时遇到了类似的问题.I
创建了扩展SubversionSCM(官方类)的类.我只是想
覆盖超类的公共方法,然后调用super的公共方法
例.但编译给出了错误.我不知道为什么,怎么办?剂量java有
像反映方式 s,以防止这种情况?
我尝试做一个简单的服务.这是学习如何创建服务.在我的代码中,当我点击开始按钮然后它确实向我显示说服务开始的吐司,但当我点击停止按钮然后它没有显示我的吐司说服务停止.我的logcat中也没有出现任何错误.这是我的代码
package com.zafar.batterynotify;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class BatteryNotify extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button startButton = (Button) findViewById(R.id.start);
Button stopButton = (Button) findViewById(R.id.stop);
startButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
startService(new Intent(getBaseContext(), BatteryService.class));
}
});
stopButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
stopService(new …Run Code Online (Sandbox Code Playgroud) public class PhrasesActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
releaseMediaPlayer();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_list);
final ArrayList<Word> words = new ArrayList<Word>();
#some Word elements added
WordAdapter wordAdapter = new WordAdapter(this, words, R.color.category_phrases);
ListView listView = (ListView)findViewById(R.id.numberlist);
listView.setAdapter(wordAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(PhrasesActivity.this, "Demo", Toast.LENGTH_SHORT).show();
Word word = words.get(i);
releaseMediaPlayer();
mediaPlayer = MediaPlayer.create(PhrasesActivity.this, word.getAudioResourceID());
mediaPlayer.start(); …Run Code Online (Sandbox Code Playgroud) 当扩展抽象类时,我理解为什么你必须重写一些方法。但当涉及到接口时,我不明白为什么必须这样做。如果一个接口的所有方法都必须实现,那么重写它们有什么用呢?
我正在谈论@Override注释。
我想从列表中取出用户的选择,并将其转换为使用Jbox的字符串.如何将内容转换为字符串,以便我可以使用它?
public class Graph extends JFrame
{
private String temp;
public Graph()
{ }
public void CreateBox(String[] a)
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton jButton1 = new JButton("ok");
final JList jList1 = new JList(a);
jButton1.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Object contents = jList1.getSelectedValue();
//System.out.println(contents);
setChoise((String)contents);//how can i convert it to string ?
}
});
JButton jButton2 = new JButton("close");
jButton2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
frame.add(jList1, "Center");
frame.add(jButton1,"South");
frame.add(jButton2,"North");
frame.setSize(300, …Run Code Online (Sandbox Code Playgroud) 我在许多代码中看到了很多@override元素,但我并不完全知道这意味着什么.例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Run Code Online (Sandbox Code Playgroud)
我不知道这意味着什么,我不明白我压倒什么.有人可以帮帮我吗?
java ×9
android ×4
overriding ×3
annotations ×1
interface ×1
java-8 ×1
jaxb ×1
jcombobox ×1
parent-child ×1
unit-testing ×1