被学Java,看到书中提到:
1.定义抽象类要在类定义前加abstract;
2.定义抽象方法要在方法定义前加abstract;
3.一个规则:抽象类中至少有一个抽象方法.我觉得有了第3点,第1点是不是多余的了?
根据第3点,定义为抽象类,则必须定义至少一个抽象方法,但反过来呢?定义了至少一个抽象方法的类如果不定义为抽象类,也就是不加abstract关键字,是不是无法通过编译?

解决方案 »

  1.   

    应该可以通过编译吧?!比如:一个类继承一个抽象类,但是没有实现继承类的抽象方法,那么它也变成抽象的啦,但是它没有加abstract关键字哈!
      

  2.   

    楼上的不要瞎说
    继承一个抽象类而没有实现抽象方法又不声明为abstract能让你通过编译?implements ActionListener用过的吧,
    public void actionPerformed(ActionEvent e){}
    有没有让你提示实现上述方法?没有?能让你通过编译?
      

  3.   


    我觉得有了第3点,第1点是不是多余的了?
    ======
    不多余根据第3点,定义为抽象类,则必须定义至少一个抽象方法,但反过来呢?定义了至少一个抽象方法的类如果不定义为抽象类,也就是不加abstract关键字,是不是无法通过编译?
    =======
    同意楼主的理解;无法通过编译
      

  4.   

    楼上说的对!
    简单的例子就是KeyAdapter,WindowAdapter,MouseAdapterkzh80000(如鱼得水)似乎并不清楚抽象类跟接口的关系
      

  5.   

    第三点的意义在于:如果你写了一个抽象类但是不包含抽象方法,那你完全没必要将其声明为abstract。
      

  6.   

    YidingHe(机枪兵) 说得有理
    我试了试,能通过编译
      

  7.   

    import java.awt.*;
    import java.awt.event.*;
    public class TwoListenInner
    {
    private Frame f;
    private TextField tf;
    public static void main(String args[])
    {
    TwoListenInner that=new TwoListenInner();
    that.go();
    }
    public void go()
    {
    f=new Frame("Two listeners example");
    f.add("North",new Label("Click and drag the mouse"));
    tf=new TextField(30);
    f.add("South",tf);
    f.addMouseMotionListener(new MouseMotionHandler());
    f.addMouseListener(new MouseEventHandler());
    f.addWindowListener(new WindowEventHandler());
    f.setSize(300,300);
    f.setVisible(true);
    }
    public class MouseMotionHandler extends MouseMotionAdapter
    {
    public void mouseDragged(MouseEvent e)
    {
    String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
    tf.setText(s);
    }
    }
    public class MouseEventHandler extends MouseAdapter
    {
    public void mouseEntered(MouseEvent e)
    {
    String s="The mouse entered";
    tf.setText(s);
    }
    public void mouseExited(MouseEvent e)
    {
    String s="The mouse left the building";
    tf.setText(s);
    }
    }
    public class WindowEventHandler extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
    {
    System.exit(1);
    }
    }
    }
      

  8.   

    不好意思,意思搞反了.
    第3点规则是:有一个以上抽象方法的类必须声明为抽象类.
    声明为抽象的类可以不包含抽象方法.
    我是觉得既然有一个以上抽象方法的类就必定要声明为抽象类了,那在类声明前加abstract有什么用?也就是说,只要一个类中包含了一个以上的抽象方法,这就绝对是不可以实例化的了,就不需要再加abstract声明它是抽象类不可实例化了.