java学习(6) java8 抽象类

来源:互联网 发布:怎么看数据库版本 编辑:程序博客网 时间:2024/06/16 15:28

最近学习过程中遇到了抽象类,和其紧密联系的还有抽象方法。

我们正常定义一个类是可以被实例化的,也就是用new关键字调用类的构造器来产生其实例。 但是抽象类是不能被实例化的,无法用new来产生实例。
抽象类可以包含成员变量、方法、构造器、初始化模块、内部类这些成分。但抽象类的构造器不能用于创建实例,主要用于被子类调用。

抽象类不能创建实例,只能当成父类被继承

定义抽象方法只需在普通方法上增加abstract修饰符,并把普通法的方法体全部去掉,并在方法后增加分号即可。
定义抽象类只要在普通类上增加abstract 修饰符即可,甚至一个普通类(没有包含抽象方法的类)增加abstract修饰符后也会变成抽象类。

public abstract class Shape{    {        System.out.println("执行Shape的初始化块...");    }    private String color;    // 定义一个计算周长的抽象方法    public abstract double calPerimeter();    // 定义一个返回形状的抽象方法    public abstract String getType();    // 定义Shape的构造器,该构造器并不是用于创建Shape对象,    // 而是用于被子类调用    public Shape(){}    public Shape(String color)    {        System.out.println("执行Shape的构造器...");        this.color = color;    }    // 省略color的setter和getter方法    public void setColor(String color)    {        this.color = color;    }    public String getColor()    {        return this.color;    }}
public class Triangle extends Shape{    // 定义三角形的三边    private double a;    private double b;    private double c;    public Triangle(String color , double a        , double b , double c)    {        super(color);        this.setSides(a , b , c);    }    public void setSides(double a , double b , double c)    {        if (a >= b + c || b >= a + c || c >= a + b)        {            System.out.println("三角形两边之和必须大于第三边");            return;        }        this.a = a;        this.b = b;        this.c = c;    }    // 重写Shape类的的计算周长的抽象方法    public double calPerimeter()    {        return a + b + c;    }    // 重写Shape类的的返回形状的抽象方法    public String getType()    {        return "三角形";    }}
原创粉丝点击