有点看不懂  特来请教一下

解决方案 »

  1.   


    按照我自己的思路来了:1.抽象类不可以创建实例;
    2.在子类里面如果没有覆盖父类的方法,则子类也将成为抽象类.写的不好凑合看下吧...
    /** 测试abstract使用.
     * 
     * @author Ruidong_pu
     * @version 1.1 2013.1.10
     */abstract class Tests {

    private String name;//定义姓名
    private String pwd;//定义密码

    public Tests(){

    }

    /** 用户名.
     * set/get
     * @param name
     */
    public void setName(String name){
    this.name=name;
    }

    public String getName(){
    return name;
    }

    /** 密码
     * set/get
     * @param pwd
     */

    public void setPwd(String pwd){
    this.pwd=pwd;
    }

    public String getPwd(){
    return pwd;
    }

    /**
     * 重写需要注意:
     * 1.名称
     * 2.参数
     * 3.返回类型这些需要一致.
     * @return 父类名称.
     */
    public String Show(){
    //System.out.println("Tests");
    return "Tests";
    }
    }
    public class TestTop extends Tests {

    public TestTop(){
    super();
    }


    /**
     * 输出,覆盖父类的同名方法.
     * @return TestTop类的测试字符串
     */
    public String Show(){
    setName("x");
    setPwd("123");
    //System.out.println("TestsTop");
    return "TestTop:这个用户名是:"+getName()+"\t\t密码是:"+getPwd() ;
    }
    public static void main(String args[]) {
    // TODO Auto-generated method stu
    Tests t =new TestTop();
    System.out.println(t.Show());
    System.out.println(t);
    }
    }
      

  2.   

    楼上还没有加抽象方法!我来写一个简单的吧:abstract class Job {
        public void show() {
            System.out.println(getName());
        }
        // 抽象方法,等待子类实现
        public abstract String getName();
    }
    class Teacher extends Job {
        public String getName() {
            return "man";
        }
    }
    Job只是一个抽象的概念,具体的职业才能实例化。
    Job定义了不同职业的共性的东西,像show,而不同的具体的职业的名字都不同,所以把show()作为抽象方法,等待具体的子类来实现。
    Job只是定义好一个模板,show可以print职业名,即使不知道具体的职业。而当具体的职业类Teacher继承了Job以后,就必须实现Job遗留下来的getName方法,这时候show就能正常执行了。楼主可以看看【模板模式】这个里面有详细的介绍!java的abstract其实就是模板模式的一个很好的实现。
      

  3.   

    有一种接口叫做回调接口,就可以借助抽象类实现public interface I {
    public void doSomething();
    }
    public abstract class Ac implements I{
    @Override
    public void doSomething() {
    beforDoSomething();
    System.out.println("DoIt");
    afterDoSomething();
    }
    abstract void beforDoSomething();
    abstract void afterDoSomething();
    }
    public class Cc extends Ac {
    @Override
    void beforDoSomething() {
    System.out.println("befor");
    }
    @Override
    void afterDoSomething() {
    System.out.println("after");
    }
    public static void main(String[] args) {
    I i = new Cc();
    i.doSomething();
    }
    }
      

  4.   

    供Lz参考:抽象方法:必须在抽象类中,不具体的方法(看不懂的东西,不确定的),可修饰为抽象不可以被实例化(也就是不能被new出来),创建他没意义,要被使用,必须由其子类复写所有方法,建立子类对象调用,如果子类只复写了部分抽象方法,那么该子类还是个抽象类抽象类中可以不定义抽象方法,但是抽象方法一定要定义在抽象类中