14、抽象類
java 第四大特徵 抽象性(abstract 關鍵字的使用)
一、抽象類
概念:有時將父類設計得非常抽象,以至於沒有具體的例項,這樣的類叫做抽象類
二、abstract 關鍵字的使用
abstract 可以用來修飾的結構:方法,類
abstract 修飾類 (抽象類)
- 此類不能被例項化
- 抽象類中一定有構造器,便於子類物件例項化時呼叫(涉及子類物件例項化的全過程)
- 開發中 ,都會提供抽象類的子類 ,讓子類物件例項化 ,完成相關操作
abstract 修飾方法 (抽象方法)
- 即只有方法的宣告,沒有方法體
- 包含抽象方法的類一定是抽象類(防止建立方法後,呼叫抽象方法),反之,抽象類中不一定要有抽象方法
- 若父類是抽象類,且含有抽象物件,則子類中必須重寫這些抽象物件
三、abstract 使用上的注意點:
abstract 不能修飾:屬性、構造器、程式碼塊等結構
abstract 不能修飾私有方法(私有方法不能被重寫)、靜態方法(靜態方法不能被覆蓋) 被final 修飾過的類和方法
四、抽象類的匿名子類
- 匿名物件
methodA(new OrderA());
- 非匿名的類 非匿名物件
OrderB o1 = new OrderB();
methodB(o1);
- 匿名物件 非匿名的類
methodB(new OrderB());
- 匿名的類 匿名的物件
Order o2 = new Order(){
//建立了一個匿名子類的物件
//注意重寫抽象方法
@Override
public void eat() {}
};//注意分號
methodA(o2);
五、完整示例
1、示例1
public class AbstractTest {
public static void main(String[] args) {
//Person p1 = new Person();
//報錯,Person被abstract修飾,不能被例項化
}
}
abstract class Person{
String name;
int age;
//構造器
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//抽象方法
abstract public void eat();
public void walk(){
System.out.println("走路");
}
}
class Student extends Person{
public Student(String name,int age){
super();
}
public void eat(){//
}
}
2、示例2
public class ProsenTest {
public static void main(String[] args) {
//匿名物件
methodA(new OrderA());
//非匿名的類 非匿名物件
OrderB o1 = new OrderB();
methodB(o1);
//匿名物件 非匿名的類
methodB(new OrderB());
//匿名的類 匿名的物件
Order o2 = new Order(){
//建立了一個匿名子類的物件
//注意重寫抽象方法
@Override
public void eat() {
}
};//注意分號
methodA(o2);
}
public static void methodA(Order o){
o.eat();
}
public static void methodB(OrderB o){
o.eat();
o.sleep();
}
}
abstract class Order{
public Order() {
}
public abstract void eat();//注:抽象方法沒有方法體
}
class OrderA extends Order{
@Override
public void eat() {
}
}
class OrderB extends Order{
@Override
public void eat() {
}
public void sleep(){
System.out.println("睡覺");
}
}
相關文章
- 抽象類、抽象欄位、抽象方法抽象
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- 抽象類抽象
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- java抽象類和抽象方法Java抽象
- Java 抽象類Java抽象
- PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- TypeScript abstract 抽象類TypeScript抽象
- Python抽象類Python抽象
- 33_抽象類抽象
- 抽象類與介面抽象
- 抽象類VS介面抽象
- java之抽象類Java抽象
- C#抽象類C#抽象
- 介面與抽象類抽象
- 介面和抽象類抽象
- 21-抽象類抽象
- 抽象類和介面抽象
- 介面的行為抽象和抽象類的行為抽象抽象
- 8 python 抽象類Python抽象
- 多型和抽象類多型抽象
- 淺談Java抽象類Java抽象
- Java的抽象類 & 介面Java抽象
- 介面和抽象類 (abstract)抽象
- JavaSE基礎:抽象類Java抽象
- 物件導向-抽象類物件抽象
- 不忘本~抽象類抽象
- 抽象類 & 介面比較抽象
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- java中抽象類和介面Java抽象
- 抽象類及介面詳解抽象
- Java —— 流的抽象基類Java抽象
- Python抽象基類abcPython抽象
- 繼承+多型+抽象類繼承多型抽象
- 第十一章 抽象類抽象
- 有關C#抽象類C#抽象