码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类(abstract)

时间:2016-08-18 14:21:19      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

概念

  由来

    当多个类出现相同功能,但是功能呢个主体不同,这时可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体

  抽象

    看不懂

  书写规则

    修饰符 abstract 返回值 方法名();

特性

  1.抽象类就是通过继承来使用的,抽象方法一定在抽象类中,并且抽象方法不可以有方法体,普通方法可以写在抽象类中,并且可以有方法体,子类也会继承抽象类中的普通方法,子类对象可以调用[例1]

  2.抽象方法和抽象类都必须被abstract关键词修饰[例2]

  3.抽象方法不可以用new创建对象[实例化],因为调用抽象方法没有意义,抽象方法是空的[例3]

  4.抽象类中的方法要被使用,必须由子类重写父类所有的抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类[例4]

细节问题

  1.如果父类是抽象类,子类是普通类 那么子类必须重写父类中的抽象方法。

  2.如果父类是抽象类,子类是抽象类子类可以选择是否重写。
  3.父类是普通类,子类是抽象类。这种情况也可以。
  4.抽象类中可不可以没有抽象方法。

       ---------->可以
   5.普通类中可不可以有抽象方法

       ---------->不可以

   6.抽象类中可不可以有普通方法?

      ---------->可以

          >>,普通方法可以写在抽象类中,并且可以有方法体,子类也会继承抽象类中的普通方法,子类对象可以调用
   7.抽象类中有没有构造?  

       ---------->有        

          >>帮助子类实例化,但是构造方法不可以被继承,只能供子类用super()或者super(参数)调用

  8.关于abstract是否可以与staticfinal一起使用
      static与abstract    

      ---------->不可以  

           >>static修饰的方法可以通过类名调用,因为static修饰的方法不可以被重写,但是抽象类的方法是要求子类必须重写父类中的抽象方法的,所以相互矛盾
      final与abstract

                ---------->不可以    

           >>这两个是完全相反的操作。因为抽象类是被继承才能使用,而被final修饰的类无法继承,所以产生矛盾,不能并存
      private与abstract

      ---------->不可以    

            >>因为private私有化了,就不能被继承了。因为,当一个类被声明为private时,这个类就是一个内部类,内部类可以被其他外部类访问到,所以可以 继承,这时abstractheprivate可以并存。但是如果这个类不是内部类的话,private和abstract不可以并存

示例代码

例1

 1 public class FinalDemo {
 2     public static void main(String[] args) {
 3         Abc abc = new Abc();
 4         abc.test1(); // 我是抽象类中的普通方法
 5         abc.test(); // 我重写了抽象类中的方法
 6     }
 7 }
 8 
 9 abstract class Abs {
10     abstract void test();
11 
12     void test1() {
13         System.out.println("我是抽象类中的普通方法");
14     }
15 
16 }
17 
18 class Abc extends Abs {
19 
20     @Override
21     void test() {
22         System.out.println("我重写了抽象类中的方法");
23     }

例2

 1 public class FinalDemo {
 2     public static void main(String[] args) {
 3 
 4     }
 5 }
 6 
 7 abstract class Abs {
 8     abstract void test();
 9 
10 }

例3

 1 public class FinalDemo {
 2     public static void main(String[] args) {
 3         Abs abs=new Abs;
 4     }
 5 }
 6 
 7 abstract class Abs {
 8     abstract void test();
 9     
10 
11 }

视图

技术分享

例4

 

 1 public class FinalDemo {
 2     public static void main(String[] args) {
 3         
 4     }
 5 }
 6 
 7 abstract class Abs {
 8     abstract void test();
 9     abstract void test1();
10 
11 }
12 
13 class Abc extends Abs{
14 
15     @Override
16     void test() {
17         // TODO Auto-generated method stub
18         
19     }
20     
21 }

视图

技术分享

 

 

 

抽象类(abstract)

标签:

原文地址:http://www.cnblogs.com/wcy123/p/5783694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!