Java 抽象類
在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類除了不能實例化對象之外,類的其它功能依然存在,成員變量、成員方法和構造方法的訪問方式和普通類一樣。
由於抽象類不能實例化對象,所以抽象類必須被繼承,才能被使用。也是因爲這個原因,通常在設計階段決定要不要設計抽象類。
父類包含了子類集合的常見的方法,但是由於父類本身是抽象的,所以不能使用這些方法。
在Java中抽象類表示的是一種繼承關係,一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
特點:
* 注意: abstract只能修飾類和方法!
* 特點:
* 1.抽象方法必須放在抽象類中
* 2.抽象方法省略{}部分,只需要聲明方法即可!
* 3.抽象類-->被子類繼承--->創建對象(其實就是抽象類不可以new對象)
* 4.抽象類中可以有普通方法,也可以有抽象方法
* 5.非抽象類繼承抽象類時,子類必須重寫抽象類中的抽象方法
實例:
public class Main {
//定義抽象類
public static abstract class Player {
public String name;
public void sleep() {
System.out.println("一起睡覺!");
}
// 抽象方法
public abstract void sports();
}
//繼承抽象類
public static class PingPangPlayer extends Player{
//子類必須實現父類的抽象方法
public void sports() {
System.out.println("打乒乓球");
}
}
//繼承抽象類
public static class FootballPlayer extends Player{
//子類必須實現父類的抽象方法
public void sleep() {
System.out.println("Let's sleep.");
}
public void sports() {
System.out.println("踢足球");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Player player = new PingPangPlayer();
player.name = "鄧亞萍";
FootballPlayer foolballPlayer = new FootballPlayer();
foolballPlayer.name = "武磊";
//調用從父類中繼承來的公共方法
player.sleep();
foolballPlayer.sleep();
player.sports();
foolballPlayer.sports();
}
}
練習:
* 練習:
* 1.定義一個抽象類(形狀類)
抽象方法---計算面積 計算周長
* 2.定義長方形,繼承於抽象類
* 3.定義正方形,繼承於抽象類
* 4.定義圓形,繼承於抽象類
//shape 類
public abstract class shape {
public abstract double S();
public abstract double C();
}
//Circle 類
public class Circle extends shape{
public final double pi = Math.PI;
private double r;
public double S() {
return r * r * pi;
}
public double C() {
return 2.0 * pi * r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public Circle(double r) {
this.r = r;
}
}
//Rectangl
public class Rectangl extends shape{
private double a, b;
public double S() {
double s = this.a * this.b;
return s;
}
public double C() {
double c = (this.a + this.b) * 2.0;
return c;
}
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public Rectangl(double a, double b) {
this.a = a;
this.b = b;
}
}
//Square 類
public class Square extends shape{
private double a;
public double S() {
return a * a;
}
public double C() {
return a * 4.0;
}
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public Square(double a) {
this.a = a;
}
}
//Main 類 及main方法
public class Main {
public static void main(String[] args) {
shape a = new Circle(1.0);
System.out.println(a.C());
System.out.println(a.S());
shape b = new Rectangl(1.0, 2.0);
System.out.println(b.C());
System.out.println(b.S());
shape c = new Square(1.0);
System.out.println(c.C());
System.out.println(c.S());
}
}