今天按照书上的练习Struts框架 其中DAO层 基本的数据库连接类是abstract 的 类中没有abstract 方法 , 另外一个具体实现DAO操作的类继承自该abstract类 , (一个abstract类中可以没有abstract方法 ,这点我知道)  , 只是我很不理解 , 既然你类中没有abstract方法 , 你又何必要该写成abstract的呢? 假如连接类本身不是abstract的 , 而是一个普通的class 同样可以被其它DAO类所继承, (我上次写的Demo , 数据库连接类就是普通的class) , 一个没有abstract方法的abstract类和 普通 的class 究竟有什么不同呢?

解决方案 »

  1.   

    我认为没有abstract方法的abstract类是无意义的,他并没有体现出用abstract的好处
      

  2.   

    一个abstract类,无论有没有abstract方法,不能直接实例化,只能通过继承类创建实例例如:package com.test.mytest;public class TestAbstract {
    public static void main(String[] args) {
    //定义一个抽象类类型(接口)
    Abs abs = null;

    //使用多态,降低系统的耦合度
    abs = new ClassA();
    abs.doSomething();

    //使用多态,降低系统的耦合度
    abs = new ClassB();
    abs.doSomething();
    }
    }abstract class Abs {
    public void doSomething() {
    System.out.println("output from abstract class");
    }
    }class ClassA extends Abs {
    @Override
    public void doSomething() {
    System.out.println("output from ClassA");
    }
    }class ClassB extends Abs {
    @Override
    public void doSomething() {
    System.out.println("output from ClassB");
    }
    }结果是:
    output from ClassA
    output from ClassB