java笔记:抽象方法与抽象类

抽象方法和抽象类

1.规则

*抽象方法和抽象类必须用abstract进行修饰,有抽象方法的类只能被定义为抽象类,抽象类中可以没有抽象方法

*抽象类不能被实例化,无法使用new调用抽象类的构造器创建抽象类的实例(无法创建实例)

*抽象类中可以包含成员变量,方法,构造器,初始化块,内部类(接口,枚举)五种成分,抽象类的构造器不能用于创建实例,主要用来被子类进行调用

*含抽象方法的类,或者继承了一个抽象父类,但是没有完全实现父类包含的抽象方法,或者实现一个接口,却没有完全实现接口包含的抽象方法的类,只能被定义为抽象类

举个栗子:

/**
 * 建立抽象类Shape
 */
public abstract class Shape {
    {
        System.out.println("执行Shape的初始化块");
    }

    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }


    //定义方法计算周长
    public abstract double calcPermeter();

    //返回形状
    public abstract String getType();

    //定义构造器 被子类使用
    public Shape() {
    }

    public Shape(String color) {
        System.out.println("执行Shape的构造器....");
        this.color = 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);
    }
    @Override
    public double calcPermeter() {
        return a+b+c;
    }

    @Override
    public String getType() {
        return "三角形";
    }
    public void setSides(double a,double b,double c){
        if(a>=b+c||b>=a+c||c>=a+b){
            System.out.println("error shape");
            return;
        }
        this.a=a;
        this.b=b;
        this.c=c;
    }

}

public class Client {
    public static void main(String[]args){
        Shape t1=new Triangle("red",3,4,5);
        System.out.println(t1.calcPermeter());
        System.out.println(t1.getType());
    }
}

Shape:抽象类

Triangle:实体类

Client:main

 

2.如何使用abstract

static和abstract不能同时修饰某个方法,但是可以修饰某个内部类

abstract必须被子类重写才有意义,否则,这个方法将不会有方法体,所以private和abstract不能共用

 

3.抽象类的作用

抽象类不能创建实例,只能当做父类被继承,通过抽象类可以定义多个子类的通用模板,子类在抽象类的基础上进行拓展改造,但是子类总体上会保留抽象类的行为方式

 

 

你可能感兴趣的:(java基础)