以下代码来自http://docs.oracle.com/javase/tutorial/java/IandI/examples/CharSequenceDemo.java我在笔记本电脑中使用netbeans运行以了解界面。
public class CharSequenceDemo implements CharSequence {
private String s;
public CharSequenceDemo(String s) {
//It would be much more efficient to just reverse the string
//in the constructor. But a lot less fun!
this.s = s;
}
//If the string is backwards, the end is the beginning!
private int fromEnd(int i) {
return s.length() - 1 - i;
}
public char charAt(int i) {
if ((i < 0) || (i >= s.length())) {
throw new StringIndexOutOfBoundsException(i);
}
return s.charAt(fromEnd(i));
}
public int length() {
return s.length();
}
public CharSequence subSequence(int start, int end) {
if (start < 0) {
throw new StringIndexOutOfBoundsException(start);
}
if (end > s.length()) {
throw new StringIndexOutOfBoundsException(end);
}
if (start > end) {
throw new StringIndexOutOfBoundsException(start - end);
}
StringBuilder sub =
new StringBuilder(s.subSequence(fromEnd(end), fromEnd(start)));
return sub.reverse();
}
public String toString() {
StringBuilder s = new StringBuilder(this.s);
return s.reverse().toString();
}
//Random int from 0 to max. As random() generates values between 0 and 0.9999
private static int random(int max) {
return (int) Math.round(Math.random() * (max+1));
}
public static void main(String[] args) {
CharSequenceDemo s =
new CharSequenceDemo("Write a class that implements the CharSequence interface found in the java.lang package.");
//exercise charAt() and length()
for (int i = 0; i < s.length(); i++) {
System.out.print(s.charAt(i));
}
System.out.println("");
//exercise subSequence() and length();
int start = random(s.length() - 1);
int end = random(s.length() - 1 - start) + start;
System.out.println(s.subSequence(start, end));
//exercise toString();
System.out.println(s);
}
}
方法toString netbeans说 - &gt;方法被覆盖和实现,但对于其他它只是说被覆盖。覆盖和实现方法有什么区别?他们不一样吗?
答案 0 :(得分:3)
在Java 5.0中,@ Override只能放在覆盖超类中定义的方法的方法上,而不是在接口中声明的方法。在Java 6+中,您可以将@Override放在实现和覆盖方法上。
在Java 6+中,您可以覆盖而无需实现
interface A {
void method();
}
interface B extends A {
@Override
void method();
}
abstract class C implements A {
@Override
public abstract void method();
}
class D extends C {
@Override
public void method() {
}
}
答案 1 :(得分:1)
当你说“为了另一个它只是说被覆盖”时你真的意味着实施吗?
方法charAt,length和subSequence被标记为已实现,因为a)接口列出了它们,b)你为它们添加了代码(实现它们)。
toString方法说覆盖,因为该接口会覆盖所有Java对象所具有的toString方法,并且您还在CharSequenceDemo中实现了它。
答案 2 :(得分:0)
实现 - 您已经从实现的接口
定义了每个方法extends - 您可以使用父类
中编写的方法实施来自您的界面。
Override来自Object(每个java对象隐式扩展Object)
答案 3 :(得分:0)
CharSequence 有toString()
方法,当您的类实现CharSequence时,您的类将被强制实现toString()(因此实现),但是所有类的扩展{ {1}} java.lang.Object
声明您的类将从Object类继承它(因此覆盖)。
因此在你的情况下