抽象方法
被abstract修飾的實(shí)例方法
- 只有方法申明,沒有方法實(shí)現(xiàn)(參數(shù)列表后面沒有大括號(hào)涡上,而是分號(hào))
- 不是用private修飾權(quán)限(因?yàn)槎x抽象方法的目的是讓子類去實(shí)現(xiàn))
- 只能定義在抽象類趣苏、接口中
抽象類
被abstract修飾類
- 可以定義抽象方法
- 不能實(shí)例化,但可以自定義構(gòu)造方法
- 子類必須實(shí)現(xiàn)抽象類中的所有抽象方法(除非子類也是一個(gè)抽象方法)
- 可以像非抽象類一樣定義成員變量、常量匾旭、嵌套類、初始化塊圃郊、非抽象方法等
抽象類使用場(chǎng)景
如果A類和B類中都有公共的部分价涝,可以把這部分抽取為一個(gè)抽象類,然后A類和B類繼承這個(gè)抽象類持舆。
示例:假設(shè)需要求圓形和長(zhǎng)方形的面積和周長(zhǎng)色瘩。
- 創(chuàng)建一個(gè)圖形(Shape)抽象類伪窖,包含面積,周長(zhǎng)成員變量和計(jì)算的抽象方法
public abstract class Shape {
//名字
private String name;
//面積
protected double area;
//周長(zhǎng)
protected double girth;
public Shape(String name) {
this.name = name;
}
public double getArea() {return area;}
public double getGirth() {return girth;}
public void show() {
calculate();
System.out.println(name + "的面積是:" + area);
System.out.println(name + "的周長(zhǎng)是:" + girth);
}
/*
* 抽象方法居兆,計(jì)算
*/
public abstract void calculate();
}
- 創(chuàng)建一個(gè)長(zhǎng)方形覆山,并繼承Shape
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(String name, double width, double height) {
super(name);
// TODO Auto-generated constructor stub
this.width = width;
this.height = height;
}
@Override
public void calculate() {
// TODO Auto-generated method stub
this.area = this.width * this.height;
this.girth = 2 * (this.width + this.height);
}
}
- 創(chuàng)建一個(gè)圓形,并繼承Shape
public class Round extends Shape {
//圓的半徑
private double radius;
public Round(String name, double radius) {
super(name);
// TODO Auto-generated constructor stub
this.radius = radius;
}
@Override
public void calculate() {
// TODO Auto-generated method stub
this.area = Math.sqrt(this.radius) * Math.PI;
this.girth = 2 * Math.PI * this.radius;
}
}
- 在main方法中初始化圓形和長(zhǎng)方形
Shape round = new Round("圓形", 100);
round.show();
Shape rectangle = new Rectangle("長(zhǎng)方形", 100, 200);
rectangle.show();
- 打印結(jié)果為
圓形的面積是:31.41592653589793
圓形的周長(zhǎng)是:628.3185307179587
長(zhǎng)方形的面積是:20000.0
長(zhǎng)方形的周長(zhǎng)是:600.0