面向对象_抽象类

一、抽象类的基本概念

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

  使用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 }
时间: 2024-10-10 06:09:59

面向对象_抽象类的相关文章

013_面向对象_抽象类和接口

1.抽象类(abstract) (1)特点 ①方法只有声明没有实现时,该方法就是抽象方法,抽象方法必须定义到抽象类中,该类也必须被abstract修饰 ②抽象类不可以被实例化,因为调用抽象方法没有意义. ③抽象类必须有子类覆盖所有的抽象方法,该子类才可以实例化,否则,这个子类还是抽象类 (2)常见问题 ①抽象类中有构造函数吗? 有,用来给子类对象初始化 ②抽象类可以不定义抽象方法吗? 可以.目的是不让该类创建对象,通常这个类中的方法有方法体,却没有内容 ③抽象关键字不可以和哪些关键字共存? pr

面向对象_多态_抽象类_接口

09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案例演示 代码体现多态 public class Demo1_polymorphic { /** * 成员变量:编译时看左边(父类),运行时看左边(父类) * 成员方法:编译时看左边(父类),运行时看右边(子类) * @param args */ public static void main(Str

黑马程序员_面向对象之抽象类与接口

抽象类(abstract)???? 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了. 抽象类概念 当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而

二、Java面向对象(14)_抽象类和抽象方法

2018-05-06 抽象类和抽象方法 一.抽象的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化.这样,抽象类也就诞生了. 例如,定义了"动物"父类,其中"动物名称"和"动物年龄"属性已经明确了

2019-05-17 Java学习日记之面向对象_多态&抽象类&接口

多态 多态的概述: A:多态(polymorphic) 事物存在的多种形态 B:多态前提 a:要有继承关系 b:要有方法重写c:要有父类引用指向子类对象 多态中的成员访问特点之成员变量: 成员变量:编译看左边(父类),运行看左边(父类)多态中的成员访问特点之成员方法:成员方法:编译看左边(父类),运行看右边(子类)多态中的成员访问特点之静态成员方法:静态方法:编译看左边(父类),运行看左边(父类)(静态和类相关,算不上重写,所以访问还是左边的)只有非静态的成员方法,编译看左边,运行看右边 多态的

JavaSE知识-09(面向对象_多态&抽象类&接口)

多态的概述及其代码体现 多态(polymorphic)概述 事物存在的多种形态 多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. class Demo1_Polymorphic { public static void main(String[] args) { Cat c = new Cat(); c.eat(); Animal a = new Cat(); //猫是一只动物 //父类引用指向子类对象 a.eat(); } } class Animal { pu

面向对象_继承

一.继承的基本概念: 1.继承是面向对象的三大特性之一  2.被继承的类称为父类(超类),继承父类的类称为子类(派生类)  3.继承是指一个对象直接使用另一个对象的属性和方法(继承之后才能使用) 4.通过继承可以实现代码重用 二.使用继承的要求 1.将每个类的共性提取出来单独放在一个类中来描述 2.然后让这个类与其他每个类之间有点关系这样就可以了 3.注意:千万不要为了获取其他类的功能,简化代码而继承 4.必须是类与类之间有所属关系才可以继承 5.例如:将学生和工人的共性(共同属性,共同方法)描

黑马程序员_抽象类_接口

---------     Java培训.Android培训.iOS培训..Net培训    期待与您交流!  ------ 一,抽象类: 1,抽象类的产生: 比如犬类事务,都具备吼叫的功能,但是叫声却不一样,叫声则是由具体的子类来赋予的,那么这时功能不具体,但是却相似的功能,需要在父类中标示出来,则通过java中关键字:abstact(抽象). abstract void 吼叫()://抽象函数,需要abstract修饰,并用分号结束.定义了抽象函数的类也必须用abstract修饰.被abst

面向对象 ---Java抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法. 定义抽象类:   抽象方法