天天看點

Java基礎系列18-抽象類abstract一.抽象類概述二. 抽象類的特點三. 抽象類的成員的特點參考:

文章目錄

  • 一.抽象類概述
  • 二. 抽象類的特點
  • 三. 抽象類的成員的特點
  • 參考:

一.抽象類概述

  當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具回想前面我們的貓狗案例,提取出了一個動物類,這個時候我們是可以通過Animal a = new Animal();來建立動物對象的,其實這是不對的。為什麼呢?因為,我說動物,你知道我說的是什麼動物嗎?隻有看到了具體的動物,你才知道,這是什麼動物。

  是以說,動物本身并不是一個具體的事物,而是一個抽象的事物。隻有真正的貓,狗才是具體的動物。

  同理,我們也可以推想,不同的動物吃的東西應該是不一樣的,是以,我們不應該在動物類中給出具體展現,而是應該給出一個聲明即可。

  在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類。

代碼:

abstract1

package Java_study;

/**
 * 
 * @author   隻是甲
 * @date     2021-06-28
 * @remark   動物抽象類   抽象類概述
 *
 */
public abstract class abstract1 {
	/* public void eat() {
		System.out.println("吃東西");
	}*/
	
	//抽象方法
	public abstract void eat();

}
           

abstract2

package Java_study;

/**
 * 
 * @author   隻是甲
 * @date     2021-06-28
 * @remark   動物抽象測試類   抽象類概述
 *
 */
public class abstract2 {
	public static void main(String[] args) {
		//抽象類和抽象方法不能被執行個體化
		//abstract1 a = new abstract1();
	}

}
           

二. 抽象類的特點

抽象類和抽象方法必須用abstract關鍵字修飾

  格式:

public abstract class 類名 {}

public abstract void eat();
           

  抽象類不一定有抽象方法,有抽象方法的類一定是抽象類

  抽象類不能執行個體化

    那麼,抽象類如何執行個體化呢?

    按照多态的方式,由具體的子類執行個體化。其實這也是多态的一種,抽象類多态。

  抽象類的子類

    要麼是抽象類

    要麼重寫抽象類中的所有抽象方法

代碼:

abstract_animal

package Java_study;

/**
 * 
 * @author 隻是甲
 * @date   2021-06-28
 * @remark 動物抽象類   抽象類特點
 *
 */
public abstract class abstract_animal {
	//抽象方法
	public abstract void eat();
	
	public void sleep() {
		System.out.println("睡覺");
	}

}
           

abstract_cat

package Java_study;

/**
 * 
 * @author 隻是甲
 * @date   2021-06-28
 * @remark 動物抽象類子類--貓類   抽象類特點
 *
 */
public class abstract_cat extends abstract_animal {
	@Override
	public void eat() {
		System.out.println("貓吃魚");
	}
}
           

abstract_dog

package Java_study;

/**
 * 
 * @author 隻是甲
 * @date   2021-06-28
 * @remark 動物抽象類子類--狗類   抽象類特點
 *
 */
public class abstract_dog extends abstract_animal {
	@Override
	public void eat() {
		System.out.println("狗吃骨頭");
	}

}

           

abstract_test1

package Java_study;

/**
 * 
 * @author 隻是甲
 * @date   2021-06-28
 * @remark 動物抽象類子類--測試類   抽象類特點
 *
 */
public class abstract_test1 {
	public static void main(String[] args) {
		// 建立對象(C: 抽象類不能執行個體化)
		// abstract_animal animal = new abstract_animal();
		
		// c1: 參照多态的方式,通過子類對象執行個體化
		abstract_animal cat = new abstract_cat();
		cat.eat();//貓吃魚
		cat.sleep();//睡覺
	}

}
           

三. 抽象類的成員的特點

成員變量

  可以是變量

  也可以是常量

構造方法

  有構造方法,但是不能執行個體化

  那麼,構造方法的作用是什麼呢?

    用于子類通路父類資料的初始化

成員方法

  可以有抽象方法 限定子類必須完成某些動作

  也可以有非抽象方法 提高代碼複用性

代碼:

abstract_person

package Java_study;

/**
 * 
 * @author  隻是甲
 * @date    2021-06-28
 * @remark  人抽象類 抽象類的成員的特點
 *
 */
public abstract class abstract_person {
	private int age = 20;
	private final String country = "中國";
	
	public abstract_person() {
		
	}
	
	public abstract_person(int age) {
		this.age = age;
	}
	
	public void show() {
		age = 30;
		System.out.println(age);
		//country = "美國"
		System.out.println(country);
	}
	
	public abstract void eat();

}

           

abstract_student

package Java_study;

/**
 * 
 * @author  隻是甲
 * @date    2021-06-28
 * @remark  人抽像的子類-學生類 抽象類的成員的特點
 *
 */
public class abstract_student extends abstract_person {
	@Override
	public void eat() {
		System.out.println("學生吃土");
	}
}


           

abstract_test2

package Java_study;

/**
 * 
 * @author  隻是甲
 * @date    2021-06-28
 * @remark  人抽像的測試類 抽象類的成員的特點
 *
 */
public class abstract_test2 {
	public static void main(String[] args) {
		abstract_person student = new abstract_student();
		student.show();//30
		               //中國
		student.eat();//學生吃土
	}

}

           

測試記錄:

30
中國
學生吃土
           

參考:

  1. https://blog.csdn.net/qq_43529621/article/details/115303081