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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董将 中级黑马   /  2012-12-18 21:26  /  1058 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为抽象类这个家伙怎么说呢,比较抽象,一般在学习的时候有点无从下手的感觉?
什么是抽象类?有什么用处?一般都用在什么地方?有什么地方不能使用抽象类?能否在抽象类中不定义抽象方法?
一下是个人小小总结,希望对个位有所帮助。
抽象类的特征:
使用 abstract来修饰一个类,那么这个类就是抽象类了。
class abstract A {
}

        什么叫再加工,其实就是需要子类来继承!子类把父类中没有完成的方法完成,就是再加工了。这样子类就可以使用了。
        半成品不能使用:就是抽象类不能实例化对象!

7 半成品类需要再加工
  抽象类需要再加工,哪里是需要再加工的地方呢?就是抽象方法。

8 抽象方法的特征
        抽象方法需要使用abstract关键字修饰
        抽象方法没有方法体
        抽象方法在参数列表后面没有大括号,但有一个分号!
        具有一个或多个抽象方法的类必须声明为抽象类!
        抽象类的子类,有两条路可以走:
        把父类所有抽象方法都实现完成,这样子类就不用再抽象了;
        不实现,或者不实现所有抽象方法,那么对子类来说也有未完成的方法,那么子类也需要声明为抽象类。
        抽象方法不能是静态的,也不能是private的,更不能是final的。与多态冲突的东西都不行!


9 抽象类是否可以有构造器
抽象类是否可以有构造器:
        思考:构造器是用来干什么的?与new使用创建实例对象!
        思考:抽象类不能创建实例对象,那么它有构造器有没有用?
        答案是有用!什么用:子类是不是需要调用父类构造器?需要,那么也就是说抽象类可以有构造器,而构造器是给子类构造器来用的!

abstract class A {
        public A(String s) {}
       
        public abstract void fun();
}

abstract class B extends A {
        public B() {
                super("hello");
        }
       
        public void fun() {
                System.out.println("hello");
        }
}


10 抽象类是否可以不定义抽象方法
抽象类可以不定义抽象方法,但很少有人这么做。
一个类如果有一到多个抽象方法,那么这个类必须声明为抽象类。

11 abstract关键字与什么关键字冲突
private、static、final
如果你的方法中,存在以上任意一个修饰符,那么这个方法就不能是抽象方法。

12 在什么时候使用抽象类
当你想调用一个方法,而这个方法的参数类型为抽象类类型!
public class Test {
        public static void main(String[] args) {
                A a = new B();
                abc(a);
        }
       
        // 该方法的参数类型为A类型
        // A类型是抽象类
        // 我们无法实例化A类型的对象
        // 说明我们需要写一个A类的子类,然后实例化子类的对象,
        // 最后使用子类对象来调用abc方法。
        public static void abc(A a) {
        }
}

abstract class A {       
        public abstract void fun();
}

class B extends A {
        public void fun() {
        }
}

当我们想使用abc()方法时,因为abc()方法的参数是A类的,而且A类是抽象类,那么我们就需要创建一个A类的子类类型对象,然后用这个对象来调用abc()方法。
1 创建A类的子类
2 创建子类对象
3 用这个对象来调用abc()方法
  在后面学习中,这种情况最为常见!!!即被动使用!

要写一个产品!
可能用户对这个产品不是很满意。当然只是部分不满意!那么我们可能会写一个抽象类,其中部分给用户自己来加工!然后再写一些成品!如果用户对成品满意那就直接使用成品,如果不满意,可以通过我们的抽象类来写自己的成品。

public class Test {
        public static void main(String[] args) {
                /*
                自己来写三个Waiter的子类,用每个子类的对象来调用fun()方法
                */
        }

        public static void fun(A a) {
                a.service();
        }
}

abstract class Waiter {
        public abstract void fun1();
        public abstract void fun2();

        public void service() {
                fun1();
                serv();
                fun2();
        }

        public void serv() {
                System.out.println("服务...");
        }
}

抽象类
        可以有实例属性、静态属性
        可以有构造器
        可以有实例方法、抽象方法、静态方法
        就是什么都可以有,就是不能有实例对象(不能创建对象)!
        抽象类一般都会有抽象方法,即没有加工的地方!

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马