A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kj1989 中级黑马   /  2014-3-16 15:37  /  1168 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kj1989 于 2014-3-20 20:19 编辑

如果一个类没有全部实现接口中的方法,那么该类在被调用时会发生何种情况?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

3 个回复

倒序浏览
如果一个类没有全部实现接口中的方法,这个类还相当于一个接口功能,变成了子接口。不能用于创建一个实例化的对象。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
编译的时会报错。如下代码:        //给文件框添加一个键盘监听
                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 个错误



评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
楼主可以比照一下抽象类,可接口的概念:
当我们声明以下接口:
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马