黑马程序员技术交流社区

标题: 关于接口继承的问题 [打印本页]

作者: kj1989    时间: 2014-3-16 15:37
标题: 关于接口继承的问题
本帖最后由 kj1989 于 2014-3-20 20:19 编辑

如果一个类没有全部实现接口中的方法,那么该类在被调用时会发生何种情况?
作者: dapeng111    时间: 2014-3-16 15:50
如果一个类没有全部实现接口中的方法,这个类还相当于一个接口功能,变成了子接口。不能用于创建一个实例化的对象。
作者: 无道    时间: 2014-3-16 16:02
编译的时会报错。如下代码:        //给文件框添加一个键盘监听
                textField.addKeyListener(new KeyListener(){
                       
                        public void keyPressed(KeyEvent e){
                                       
                                        if(e.getKeyCode() == KeyEvent.VK_ENTER){
                                                String str = textField.getText();
                                                        //列出 文件的函数
                                                decideFileName(str);
                                        }
                                                       
                        }       
                });

addKeyListener的参数是接收一个KeyListener对象,此KeyListener就是一个接口,我现在使用匿名内部类来实现它并复写其中一个方法,其它方法没有复写。编译时会出现如下提示:
F:\javaDocument>javac -d ./ GraphListFile.java
GraphListFile.java:134: 错误: <匿名awt.GraphInt$6>不是抽象的, 并且未覆盖KeyListener中的抽象方法keyReleased(KeyEvent)
                textField.addKeyListener(new KeyListener(){
                                                          ^
1 个错误




作者: 水蓝    时间: 2014-3-16 17:08
楼主可以比照一下抽象类,可接口的概念:
当我们声明以下接口:
  1. interface ITestClass {
  2.         void func1();
  3.         void func2();
  4.         void func3();
  5. }
复制代码


我们的确可以在类中不完全实现这个接口。
这种不完全实现接口的类,属于抽象类的一种。(应该用关键字abstract来修饰该类)
这种类可以通过编译,但不能通过new或者反射来创建对象。
如下:
  1. abstract class TestClass implements ITestClass{
  2.         //抽象类中实现了接口方法1
  3.         public void func1() {
  4.                 System.out.println("func1");
  5.         }
  6.         //但没有实现接口方法2和3
  7. }
复制代码


只有出现该抽象类的子类,在完全实现了所有剩余的接口方法之后,才可以通过子类实例化。
完全实现子类,代码如下:
  1. class ChildrenClass extends TestClass{
  2.         //父类TestClass中已经实现func1(),可以不覆盖
  3.        
  4.         //实现方法2
  5.         public void func2() {
  6.                 System.out.println("func1");
  7.         }
  8.         //实现方法3
  9.         public void func3() {
  10.                 System.out.println("func1");
  11.         }
  12. }
复制代码


验证方法:
  1. public class TestMain  {
  2.         TestClass tc = new ChildrenClass();
  3. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2