Java基础总结 抽象类

  • 概念
  • 构成
  • 应用
  • 总结

抽象类的概念

在面向对象概念中,类是设计的重点,而不是对象。类是用来描述事物的,但反过来,不是所有类都能用来描述事物,这种类就是缺少一定信息的抽象类。

抽象类是用abstract修饰符修饰的类,是作为父类专门为新类提供格式与模板。它不能创建实例化对象,无法使用new关键字来调用抽象类的构造方法创建抽象类的实例。

它符合“开闭原则”的设计,在这里插入图片描述

抽象类的构成

抽象类可以包含成员变量、 方法(普通方法和抽象方法都可以)、初始化块、 内部类。

1.含有抽象方法的必须是抽象类,抽象类不一定含有抽象方法。·
2.抽象方法只包含一个方法名,而没有方法体。抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
3.abstract 和static,final, native, private不能同时修饰一个方法.
4.抽象类的构造方法不能用于创建实例,主要是用于被其子类调用,其构造方法在某些情况下多余。
5.只允许单继承

抽象类的应用

子类拥有的共性被抽象出来放进抽象类中,能很好的进行代码复用
e.g.植物大战僵尸游戏里,僵尸类和植物类都有自己顶层抽象类
自己思考一下还有什么例子呢?

声明抽象方法会造成以下两个结果:
1.如果一个类包含抽象方法,那么该类必须是抽象类。
2.任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。

//求图形面积和周长
abstract class Shape {
    protected String name;
    abstract public double getArea();
    abstract public double getLength();
}
class Rect extends Shape{
    private double length,width;

    public Rect(double len,double wid,String nam) {
        this.length=len;
        this.width=wid;
        this.name=nam;
        System.out.println(name);
    }
    public double getArea(){
        return length*width;
    }
    public double getLength(){
        return 2*(length+width);
    }
}

class Square extends Shape{
    private double length;

    public Square(double len,String nam){
        length=len;
        name=nam;
        System.out.println(name);
    }
    public double getArea(){
        return length*length;
    }
    public double getLength(){
        return 4*length;
    }

}

public class abstractShape{
    public static void main(String[] args){
        Shape R=new Rect(2,3,"Rectangle");
        Shape S=new Square(4,"Square");
        System.out.println(R.getArea());
        System.out.println(R.getLength());
        System.out.println(S.getArea());
        System.out.println(S.getLength());
    }
}

抽象类的总结问

1.抽象类是什么? 作用?
2.抽象类的构成?与普通类的异同点?抽象类的一些方法的特点?
3.声明抽象方法会造成什么结果?
4.abstract关键词的特点?与其他关键词是否能混用?

你可能感兴趣的:(Java)