Java面向對象中抽象類關鍵字(abstract)的基礎運用
//abstract 抽象關鍵字!
/*
* 注意:abstract只能修飾類和方法!
* 特點:
* 1.抽象方法必須放在抽象類中
* 2.抽象方法省略{ },只需聲明方法即可!
* 3.抽象類--->被子類繼承--->創建對象(其實就是抽象類不可以new對象)
* 4.抽象類中可以有普遍方法,也可以有抽象方法
* 5.非抽象類繼承類是,子類必須重寫抽象勒種的抽象方法
*/
來讓我們直觀看一下抽象類怎麼用~
package com.abs;
//抽象類
public abstract class Player {
public String name; //運動員的姓名屬性
public void sleep() {
System.out.println("來來來!一起睡覺!");
}
// 抽象方法
public abstract void sports(); //用abstract時不需要身體 即{ }
}
package com.abs;
public class PingPangPlayer extends Player {
//子類必須事先父類的抽象方法
@Override
public void sports() {
System.out.println("好好學習,天天向上");
}
}
package com.abs;
public class Main {
public static void main(String[] args) {
Player play = new PingPangPlayer();
play.name = "鄧亞萍";
//調用從父類中繼承來的公共方法
play.sports();
foolballPlayer.sports();
}
}
下面來舉個栗子:
請使用抽象類來實現下列要求
1.形狀:正方形 長方形 圓形
2.計算正方形的面積和周長
3.計算長方形的面積和周長
4.計算圓形的面積和周長
實現代碼如下:
package com.abs2;
public abstract class absExcise {
private double esge; //邊長
private double r;//圓的半徑
private double width,height;//長方形的長寬
//抽象方法
public abstract void mianji(); //計算面積
public abstract void zhouchang(); //計算周長
//定義getters和setters
public double getEsge() {
return esge;
}
public void setEsge(double esge) {
this.esge = esge;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public absExcise() {
}
public absExcise(double esge, double r, double width, double height) {
super();
this.esge = esge;
this.r = r;
this.width = width;
this.height = height;
}
@Override
public String toString() {
return "absExcise [esge=" + esge + ", r=" + r + ", width=" + width + ", height=" + height + "]";
}
}
package com.abs2;
public class square extends absExcise {
//正方形
@Override
public void mianji() {
double result = super.getEsge() * super.getEsge();
System.out.println("正方形的面積" + result);
}
@Override
public void zhouchang() {
double result2 = super.getEsge() * 4.0;
System.out.println("正方形的周長" + result2);
}
}
package com.abs2;
public class specal_square extends absExcise{
//長方形
@Override
public void mianji() {
double result = super.getWidth() * super.getHeight();
System.out.println("長方形的面積" + result);
}
@Override
public void zhouchang() {
double result2 = super.getHeight() * 2 + super.getWidth() * 2;
System.out.println("長方形的周長" + result2);
}
}
package com.abs2;
public class resceal_yuan extends absExcise{
//圓形
@Override
public void mianji() {
double result = super.getR() * 3.14 * super.getR();
System.out.println("圓的面積爲" + result);
}
@Override
public void zhouchang() {
double result2 = 2 * 3.14 * super.getR();
System.out.println("圓的周長" + result2);
}
}
package com.abs2;
public class Main {
public static void main(String[] args) {
absExcise abs = new specal_square();
absExcise abs2 = new square();
absExcise abs3 = new resceal_yuan();
abs.setWidth(20); //給長方形的寬度賦值
abs.setHeight(10);//給長方形的長度賦值
abs.mianji();
abs.zhouchang();
abs2.setEsge(10); //給正方形的邊長賦值
abs2.mianji();
abs2.zhouchang();
abs3.setR(32); //給圓形的半徑賦值
abs3.mianji();
abs3.zhouchang();
}
}