Java 抽象类
- 一、抽象类的概念
- 二、抽象类的使用
- 1.抽象类和抽象方法的格式
- 2.抽象类和抽象方法的使用
- 3.抽象类的意义
- 4.抽象类的使用实例
一、抽象类的概念
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
二、抽象类的使用
1.抽象类和抽象方法的格式
抽象的关键字是abstract
抽象类: 加上abstract关键字修饰
抽象方法: 加上abstract关键字修饰,去掉大括号
public abstract class Animal {
//抽象方法
public abstract void eat();
public abstract void sleep();
//成员方法
public void methodTest(){
}
}
【注意】
1.
抽象方法一定在抽象类中
,抽象类不一定有抽象方法
2.抽象类仍然可以有成员变量、成员方法、构造方法
2.抽象类和抽象方法的使用
要想使用抽象类和抽象方法必须具备继承关系
定义一个抽象类Person
给 Person类 添加属性和方法
public abstract class Person{
//抽象类可以拥有成员属性、成员方法、构造方法
String name;
String sex;
//定义两个抽象方法
public abstract void eat();
public abstract void sleep();
}
Second
定义一个继承 Person类 的 Student类 (学生类)
学生类作为抽象Person的子类,
必须实现(重写)Person类的所有抽象方法
public class Student extends Person{
@Override
public void eat() {
System.out.println("学生吃饭了");
}
@Override
public void sleep() {
System.out.println("学生睡觉了");
}
}
Third
定义一个 Test类,创建子类对象并使用
public class Test{
public static void main(String[] args) {
Student s = new Student();
s.eat();
s.sleep();
}
}
运行结果:
【注意】
1.抽象类可以
具有所有普通类具拥有的东西
2.抽象方法没有大括号
3.抽象类不能创建对象
4.抽象类中不一定有抽象方法
,但有抽象方法的类一定是抽象类
5.抽象类的子类必须重写父类的所有的抽象方法(子类是抽象类除外
)
6.抽象类的构造方法是提供给子类初始化父类成员使用的
看到这里也许你会感到抽象类多此一举,那么请继续往下看
3.抽象类的意义
抽象类
约束了继承它的子类,必须实现某一种或多种功能
。
放在现实生活中可以将抽象类理解为一种规范。
举个例子:
就像手机一样,它有最基本的打电话和发短信的功能。这就可以衍生出一个抽象类。抽象类中需要定义打电话和发短信的抽象方法,虽然抽象类不必关心具体实现,但是保证了所有手机(子类)都必须实现打电话和发短信的功能。
4.抽象类的使用实例
定义抽象Person类
添加属性和方法
public abstract class Person{
String name;
String sex;
//Person类吃饭的抽象方法
public abstract void eat();
//Person类睡觉的抽象方法
public abstract void sleep();
}
定义抽象Student类
继承 Person抽象类
public abstract class Student extends Person{
//这里只实现了Person类的eat(),因为抽象子类对抽象父类得抽象方法实现是没有要求的
@Override
public void eat() {
System.out.println("学生吃饭了");
}
//Student类学习的抽象方法
public abstract void study();
}
【注意】
抽象子类
是否实现抽象父类的抽象方法
是随意
的
注意这个抽象类只实现了吃饭的抽象方法。如果其它类继承Student类,必须实现Student类没有实现的父类抽象方法以及Student类的抽象方法
定义两个Student的子类(GoodStudent和BadStudent类)
继承 Student抽象类
public class GoodStudent extends Student {
static{
System.out.println("我是好学生");
}
//实现Person类的sleep方法
@Override
public void sleep() {
System.out.println("好学生睡觉了");
}
//实现Student类的study方法
@Override
public void study() {
System.out.println("好学生在学习");
}
}
public class BadStudent extends Student {
static{
System.out.println("我是坏学生");
}
//重写Student类eat方法
@Override
public void eat(){
System.out.println("我最能吃");
}
//实现Person类的sleep方法
@Override
public void sleep() {
System.out.println("坏学生没睡觉");
}
//实现Student类的study方法
@Override
public void study() {
System.out.println("坏学生没学习");
}
}
GoodStudent和BadStudent类要实现所有没实现过的抽象方法,已经实现过的也可以根据需要重写抽象方法
编写测试类,查看程序执行结果
public class Test{
public static void main(String[] args) {
//创建好学生对象
GoodStudent goodStudent = new GoodStudent();
goodStudent.eat();
goodStudent.study();
goodStudent.sleep();
System.out.println("==============");
//创建坏学生对象
BadStudent badStudent = new BadStudent();
badStudent.eat();
badStudent.study();
badStudent.sleep();
}
}
运行结果