抽象类与抽象方法
一、抽象方法
1、定义
在类中只有声明没有具体实现的方法(只能是非静态的成员方法)(声明+实现=定义)
2、特点
在定义抽象方法必须使用abstract关键字进行修饰,否则无法(编译报错)成为抽象方法

3、作用(为什么要有抽象方法)
以动物类为例进行解释,动物类很大,在类体系结构中位于上层,里面某一方法的实现与大多数子类中方法的实现可能不一样。在这种情况下,在动物类中实现该方法的功能就没有必要了。但是必须在程序设计时,在动物类中定义好这一功能。然后让子类继承动物类,在子类中对该方法进行重写。
4、注意
(1)在定义抽象方法时不能添加static关键字,因为加了static关键字在编译时会报错(静态方法不能被修饰为抽象方法)

(2)一个类中可以定义多个抽象方法
二、抽象类
1、定义
被abstract关键字修饰的类是抽象类
2、将类定义为抽象类的时机
如果一个类中没有足够的信息来描绘一个具体的对象,这个类就要被定义为抽象类,比如这个类中要定义抽象方法
3、语法
使用关键字abstract定义抽象类
【访问权限修饰符】 abstract class 类名{
成员列表
}
4、特点
(1)抽象类不能被用于去实例化对象(无论抽象类中是否有抽象方法)
(2)抽象类的其它功能依然存在(如成员变量、成员方法、构造方法等)
package com.ffyc.bcms.service;public abstract class Animal {private String name;private int age;public abstract void eat();// 子类中绝大多数某一方法与父类不一样时,则此方法被定义为抽象方法public void sleep(){// 子类中绝大多数某一方法与父类一样时,则此方法被定义为非抽象方法System.out.println("动物睡觉");}public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}
(3)如果某个类中包含有抽象方法,那么这个类就必须被定义为抽象类
(4)抽象类只能作为基类,表示的是一种继承关系。
5、注意
(1)包含抽象方法的类一定是抽象类,抽象不一定包含抽象方法
(2)抽象类一般位于类结构的上层,用来定义有哪些功能,让具体的子类继承实现即可
如:在上层定义用户操作类这个抽象类,在这个类中定义增删改查四个方法,让普通用户操作类和vip用户操作类去继承这个抽象类,并实现里面的四个方法
(3)继承抽象类的非抽象类要么实现其中所有抽象方法(已实现方法的参数和返回值必须和抽象类中的方法一样),要么该类被声明为抽象类
package com.ffyc.bcms.service;public abstract class Dog extends Animal{public void lookHome(){// 定义Dog类共有的方法System.out.println("狗看家");}
}
package com.ffyc.bcms.service;public class XTQ extends Dog{@Overridepublic void eat() {System.out.println("神犬吃东西");}}
package com.ffyc.bcms.service;public class Test {public static void main(String[] args) {XTQ xtq=new XTQ();xtq.setName("旺财");xtq.setAge(18);System.out.println(xtq.getName()+":"+xtq.getAge());xtq.eat();xtq.lookHome();}
}

(4)抽象类、抽象方法,在软件开发过程中都是设计层面的概念。即设计人员会设计出抽象类、抽象方法,程序员再继承这些抽象类并覆盖抽象方法,实现具体功能。
