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

面向对象_抽象类

时间:2015-05-05 12:14:46      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

一、抽象类的基本概念

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

  使用abstract关键字声明的类为抽象类

 

 

 

二、抽象类的特点
  1、方法只有声明没有实现时,该方法就是抽象的,需要被abstract修饰
  2、抽象方法一定在抽象类中。(就是说只要类中又抽象方法,这个类就是抽象的)
  3、抽象方法和抽象类都必须被abstract关键字修饰
  4、抽象类不可以用new创建对象,因为调用抽象方法没有意义。
  5、抽象类中的抽象方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用
      6、如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类

 

 

 

三、抽象类中的一些问题

  1、抽象类中有构造函数吗?

     有,用于给子类对象进行初始化

  2、抽象类可以不定义抽象方法吗

    可以的,但是很少见,目的就是不让该类创建对象,通常该类中的方法有方法体,却没有内容

  3、抽象类关键不可以和哪里关键字共存?

    private:因为如果将抽象方法私有后,该方法就不能被子类复写了
    final:因为被final修饰的方法不能被复写
    static:因为如果将抽象方法被静态修饰后,可以直接用类名调用,但是没有意义

  4、抽象类和一般类的区别

    抽象类比一般类没有太大的不同
    该如何描述事物就如何描述事物,只不过,该事物出现了一些看不懂得东西
    这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体
    通过抽象方法来表示。
    抽象类比一般类多了个抽象函数,就是在类中可以定义抽象方法
    抽象类不可以实例化

  5、抽象类一定是个父类吗

    是的。因为需要子类覆盖其抽象方法后才可以对子类实例化

 1 public class AbstractDemo {
 2     public static void main(String[] args) {
 3 
 4     }
 5 }
 6 
 7 abstract class Student{
 8     abstract void study();//抽象方法必须存放在抽象类中,所以类也要抽象
 9     
10 }
11 class BaseStudent extends Student{
12     void study(){
13         System.out.println(" base study");
14     }
15 }
16 class AdvStudent extends Student{
17     void study(){
18         System.out.println("adv study");
19     }
20 }

 

 

 

四、抽象类的应用

  假如我们在开发一个系通过时需要对员工进行建模,员工都有3个属性,姓名、工号以及工资。

  经理也是员工,除了含有员工的属性外,另外还有一个奖金属性, 请使用继承的思想设计出员工类和经理类,要求类中提供必要的方法进行属性访问

  员工类:name id  pay

  经理类:继承了员工,并有自己的特有的bonus。

 1 public class AbstractTest {
 2     public static void main(String[] args) {
 3 
 4     }
 5 }
 6 abstract class Employee{
 7     private String name;
 8     private String id;
 9     private double pay;
10 
11     Employee(String name,String id,double pay){
12         this.name = name;
13         this.id = id;
14         this.pay = pay;
15     }
16     public abstract void work();
17 }
18 class Pro extends Employee{
19     Pro(String name,String id,double pay){
20         super(name,id,pay);
21     }
22     public void work(){
23         System.out.println("Pro work");
24     }
25 }
26 class Manager extends Employee{
27     private int bonus;
28     Manager(String name,String id,double pay,int bonus){
29         super(name,id,pay);
30         this.bonus = bonus;
31     }
32     public void work(){
33         System.out.println("Manager work");
34     }
35 }

 

面向对象_抽象类

标签:

原文地址:http://www.cnblogs.com/LO-ME/p/3553557.html

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