抽象类和抽象方法


概述

用于描述一个模糊的特征。有时一个类中的一些方法细节不确定,我们就可以用抽象的概念去定义。

定义格式

使用abstract关键字修饰

//定义抽象类Person
abstract class Person {
    //定义抽象方法sleep
    abstract void sleep();
}

抽象方法定义注意事项

  1. 抽象方法没有方法体,定义时没有"{}",小括号后直接跟";"。
  2. 一个类中含有抽象方法,该类必须为抽象类。
  3. 抽象类中可以不定义任何抽象方法。

抽象类和普通类的区别:

  1. 抽象类必须使用public修饰(如果被final、private修饰,子类无法继承,也就无法实现抽象方法)。
  2. 抽象类默认权限修饰符为public。
  3. 抽象类不可以使用new关键字创建对象,但子类创建对象时,抽象父类也会被JVM实例化。
  4. 抽象父类的子类,必须重写所有抽象方法。如果抽象类的子类含有未实现的抽象方法,子类也必须为抽象类。
  5. 抽象类也可以有构造方法,与普通父类一样,当子类实例化时被调用。

用代码展示一个例子:
创建抽象类,包含一个抽象方法和普通方法。

abstract class Person {
    public abstract void sleep();
    public void eat(){
        System.out.println("要吃饭...");
    }
}

创建类继承抽象类,抽象类中的非抽象方法可以不重写。

 public class Student extends Person{
    String name;

     public Student(){}

     public Student(String name){
        this.name = name;
    }

     public void sleep(){
        System.out.println(name+"要睡觉..");
    }//注意,抽象类的子类必须重写抽象类中的抽象方法

}

抽象类不能被实例化,要想调用抽象类中的方法必须创建抽象类的子类
程序入口代码如下:

    public static void main(String[] args) {
        Student stu1 = new Student("熊大");
        stu1.eat();
        stu1.sleep();
    }

运行结果如下:

要吃饭...
熊大要睡觉..

可以看出,通过实例化子类,子类对象可以直接调用抽象父类的普通方法,也可以调用抽象父类中重写的抽象方法。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM