Java——抽象類別和抽象方法

來源:互聯網
上載者:User

標籤:rri   int   abs   blog   規則   native   main   get   nbsp   

  抽象方法和抽象類別必須使用 abstract 修飾符來定義,有抽象方法的類只能被定義成抽象類別,抽象類別可以沒有抽象方法。

》抽象方法和抽象類別的規則如下:

  》抽象類別必須使用 abstract 修飾符來定義,抽象方法也必須使用 abstract 修飾符來修飾,抽象方法不能有方法體。

  》抽象方法不能被執行個體化,執行個體化的工作應該交由它的子類來完成,它只需要一個引用即可。

  》抽象類別可以包含成員變數、方法(普通方法和抽象方法都可以)、構造器、初識化塊、內部類(介面、枚舉)5種成分。抽象類別的構造器不能用於建立執行個體,主要是用於被其子類調用。

  》含有抽象方法的類(包含直接定義了一個抽象方法;或繼承了一個抽象父類,但沒有完全實現父類包含的抽象方法;或實現了一個介面,但沒有完全實現介面包含的抽象方法三種情況)只能被定義成抽象類別。

  》abstract 不能與 private、static 、 final 或 native 並列修飾同一個方法

  》abstract 不能與 final 並列修飾一個類

  》子類中的抽象方法不能與父類的抽象方法同名。

  》抽象方法必須由子類來進行重寫,否則沒有存在的意義。

》父類
public abstract class 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;    }    public String getColor() {        return color;    }    public void setColor(String color) {        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);    }        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;    }    //重寫父類方法    @Override    public double calPerimeter() {        return a+b+c;    }    @Override    public String getType() {        return "三角形";    }}

 

public class Circle extends Shape {    private double radius;        public Circle(String color, double radius) {        super(color);        this.radius = radius;    }    public void setRadius(double radius){        this.radius=radius;    }        //重寫父類的計算周長方法    @Override    public double calPerimeter() {        return 2* Math.PI * radius;    }    @Override    public String getType() {        return getColor() +"圓形";    }            public double getRadius() {        return radius;    }}

》測試類別

public static void main(String[] args) {                Shape s1= new Triangle("黑色",3,4,5);        Shape s2=new Circle("黃色",3);                System.out.println(s1.getType());        System.out.println(s1.calPerimeter());        System.out.println(s2.getType());        System.out.println(s2.calPerimeter());    }

 注意:abstract 不能用於修飾成員變數,不能用於修飾局部變數,即沒有抽象變數、沒有抽象成員變數等說法;abstract 也不能用於修飾構造器,沒有抽象構造器,抽象類別裡面定義的構造器只能是普通構造器。

Java——抽象類別和抽象方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.