Java 抽象类的使用介绍
一、抽象类的概念
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
二、抽象类的使用
1.抽象类和抽象方法的格式
抽象的关键字是abstract
抽象类: 加上abstract关键字修饰
 抽象方法: 加上abstract关键字修饰,去掉大括号
public abstract class Animal {
    //抽象方法
    public abstract void eat();
    public abstract void sleep();
    //成员方法
    public void methodTest(){
    }
}
【注意】
1.
抽象方法一定在抽象类中,抽象类不一定有抽象方法
2.抽象类仍然可以有成员变量、成员方法、构造方法
2.抽象类和抽象方法的使用
要想使用抽象类和抽象方法必须具备继承关系
 抽象是在继承的基础上产生的,如果对继承感到陌生请点这里
 Frist
 定义一个抽象类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();
    }
}
运行结果
 
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号