抽象类和抽象方法

目录

抽象方法:

抽象类:

抽象方法和抽象类的的定义格式:

抽象类和抽象方法的注意事项:

抽象类和抽象方法的意义:


抽象存在意义:

抽象方法

从子类中抽取共性到父类后 方法不知道写什么方法体(由于每个子类执行的内容是不一样的 ,方法体无法确定)时,就把方法定义为抽象方法。

抽象类

如果一个类中存在抽象方法,那么该类就必须声明为抽象类。


抽象方法和抽象类的的定义格式

  • 抽象方法定义格式:

public abstract 返回值类型 方法名(参数列表);

  • 抽象类的定义格式:

public abstract class 类名{}


抽象类和抽象方法的注意事项:

  • 抽象类不能实例化(即不可以创建对象)
  • 抽象类为子类服务(提供模板)
  • 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
  • 抽象类可以有构造方法
  • 抽象类的子类:

要么重写抽象类中的所有抽象方法(常用)

要么子类本身是抽象类(如果把子类也设为抽象类,那么只能通过 创建“孙类”来实例化)

除这两种情况,否则报错


第三点我们可能有一个疑问:

抽象类不是不可以创建对象吗,那为什么还需要构造方法?

答:因为我们还需要创建抽象类的子类,子类需要调用父类的构造方法,从而当创建子类对象时,可给属性赋值。所以抽象类中的构造方法是为子类对象服务的。


抽象类和抽象方法的意义

可以由下面疑问因为引出:

  • 把子类中共性的内容抽取到父类之后,
  • 由于方法体不确定,需要定义为抽象。子类使用时需要重写。
  • 那么我不抽取到父类,直接写在子类岂不是更节约代码?

如下:

public class Person{

    //只写属性,构造,set get,不将子类共性方法提取;
}

// 子类Student
class Student{
    public void eat(String something){
        System.out.println("吃"+something)
    }
}
// 子类Teacher
class Teacher{
    public void eat(){
        System.out.println("老师吃食堂")
    }
}







由上面代码可以看出,子类的eat方法格式各不相同,在实际开发中,一个项目由多人开发,若不同子类有不同程序员编写,那么就有可能产生多种不同的格式,不方便管理,这时就体现了方法抽取的好处,我们可以强制子类必须按照这种格式来进行重写

抽象类和抽象方法_第1张图片

因此可以总结抽象类的作用:

抽象类和抽象方法_第2张图片

你可能感兴趣的:(java,android,开发语言)