Java笔记(08):面向对象--抽象类
生活随笔
收集整理的這篇文章主要介紹了
Java笔记(08):面向对象--抽象类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、抽象類概述:
1 /* 2 抽象類的概述: 3 動物不應該定義為具體的東西,而且動物中的吃,睡等也不應該是具體的。 4 我們把一個不是具體的功能稱為抽象的功能,而一個類中如果有抽象的功能,該類必須是抽象類。 5 6 抽象類的特點: 7 A:抽象類和抽象方法必須用abstract關鍵字修飾 8 B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類 9 C:抽象類不能實例化 10 因為它不是具體的。 11 抽象類有構造方法,但是不能實例化?構造方法的作用是什么呢? 12 用于子類訪問父類數據的初始化 13 D:抽象的子類 14 a:如果不想重寫抽象方法,該子類是一個抽象類。 15 b:重寫所有的抽象方法,這個時候子類是一個具體的類。 16 17 抽象類的實例化其實是靠具體的子類實現的。是多態的方式。 18 Animal a = new Cat(); 19 */ 20 21 //abstract class Animal //抽象類的聲明格式 22 abstract class Animal { 23 //抽象方法 24 //public abstract void eat(){} //空方法體,這個會報錯。抽象方法不能有主體 25 public abstract void eat(); 26 27 public Animal(){} 28 } 29 30 //子類是抽象類 31 abstract class Dog extends Animal {} 32 33 //子類是具體類,重寫抽象方法 34 class Cat extends Animal { 35 public void eat() { 36 System.out.println("貓吃魚"); 37 } 38 } 39 40 class AbstractDemo { 41 public static void main(String[] args) { 42 //創建對象 43 //Animal是抽象的; 無法實例化 44 //Animal a = new Animal(); 45 //通過多態的方式 46 Animal a = new Cat(); 47 a.eat(); 48 } 49 }2、抽象類的成員特點:
1 /* 2 抽象類的成員特點: 3 成員變量:既可以是變量,也可以是常量。 4 構造方法:有。 5 用于子類訪問父類數據的初始化。 6 成員方法:既可以是抽象的,也可以是非抽象的。 7 8 抽象類的成員方法特性: 9 A:抽象方法 強制要求子類做的事情。 10 B:非抽象方法 子類繼承的事情,提高代碼復用性。 11 */ 12 abstract class Animal { 13 public int num = 10; 14 public final int num2 = 20; 15 16 public Animal() {} 17 18 public Animal(String name,int age){} 19 20 public abstract void show(); 21 22 public void method() { 23 System.out.println("method"); 24 } 25 } 26 27 class Dog extends Animal { 28 public void show() { 29 System.out.println("show Dog"); 30 } 31 } 32 33 class AbstractDemo2 { 34 public static void main(String[] args) { 35 //創建對象 36 Animal a = new Dog(); 37 a.num = 100; 38 System.out.println(a.num); 39 //a.num2 = 200; 40 System.out.println(a.num2); 41 System.out.println("--------------"); 42 a.show(); 43 a.method(); 44 } 45 }案例:貓狗
1 /* 2 貓狗案例 3 具體事物:貓,狗 4 共性:姓名,年齡,吃飯 5 6 分析:從具體到抽象 7 貓: 8 成員變量:姓名,年齡 9 構造方法:無參,帶參 10 成員方法:吃飯(貓吃魚) 11 12 狗: 13 成員變量:姓名,年齡 14 構造方法:無參,帶參 15 成員方法:吃飯(狗吃肉) 16 17 因為有共性的內容,所以就提取了一個父類。動物。 18 但是又由于吃飯的內容不一樣,所以吃飯的方法是抽象的, 19 而方法是抽象的類,類就必須定義為抽象類。 20 21 抽象動物類: 22 成員變量:姓名,年齡 23 構造方法:無參,帶參 24 成員方法:吃飯(); 25 26 實現:從抽象到具體 27 動物類: 28 成員變量:姓名,年齡 29 構造方法:無參,帶參 30 成員方法:吃飯(); 31 32 狗類: 33 繼承自動物類 34 重寫吃飯(); 35 36 貓類: 37 繼承自動物類 38 重寫吃飯(); 39 */ 40 //定義抽象的動物類 41 abstract class Animal { 42 //姓名 43 private String name; 44 //年齡 45 private int age; 46 47 public Animal() {} 48 49 public Animal(String name,int age) { 50 this.name = name; 51 this.age = age; 52 } 53 54 public String getName() { 55 return name; 56 } 57 58 public void setName(String name) { 59 this.name = name; 60 } 61 62 public int getAge() { 63 return age; 64 } 65 66 public void setAge(int age) { 67 this.age = age; 68 } 69 70 //定義一個抽象方法 71 public abstract void eat(); 72 } 73 74 //定義具體的狗類 75 class Dog extends Animal { 76 public Dog() {} 77 78 public Dog(String name,int age) { 79 super(name,age); 80 } 81 82 public void eat() { 83 System.out.println("狗吃肉"); 84 } 85 } 86 87 //定義具體的貓類 88 class Cat extends Animal { 89 public Cat() {} 90 91 public Cat(String name,int age) { 92 super(name,age); 93 } 94 95 public void eat() { 96 System.out.println("貓吃魚"); 97 } 98 } 99 100 //測試類 101 class AbstractTest { 102 public static void main(String[] args) { 103 //測試狗類 104 //具體類用法 105 //方式1: 106 Dog d = new Dog(); 107 d.setName("旺財"); 108 d.setAge(3); 109 System.out.println(d.getName()+"---"+d.getAge()); 110 d.eat(); 111 //方式2: 112 Dog d2 = new Dog("旺財",3); 113 System.out.println(d2.getName()+"---"+d2.getAge()); 114 d2.eat(); 115 System.out.println("---------------------------"); 116 117 Animal a = new Dog(); 118 a.setName("旺財"); 119 a.setAge(3); 120 System.out.println(a.getName()+"---"+a.getAge()); 121 a.eat(); 122 123 Animal a2 = new Dog("旺財",3); 124 System.out.println(a2.getName()+"---"+a2.getAge()); 125 a2.eat(); 126 127 //練習:測試貓類 128 } 129 }3、abstrace不能和哪些關鍵字共存:
1 /* 2 一個類如果沒有抽象方法,可不可以定義為抽象類?如果可以,有什么意義? 3 A:可以。 4 B:不讓創建對象。 5 6 abstract不能和哪些關鍵字共存? 7 private 沖突 8 final 沖突 9 static 無意義 10 */ 11 abstract class Fu { 12 //public abstract void show(); 13 //非法的修飾符組合: abstract和private 14 //private abstract void show(); 15 16 //非法的修飾符組合 17 //final abstract void show(); 18 19 //非法的修飾符組合 20 static abstract void show(); 21 22 public static void method() { 23 System.out.println("method"); 24 } 25 } 26 27 class Zi extends Fu { 28 public void show() {} 29 } 30 31 class AbstractDemo3 { 32 public static void main(String[] args) { 33 Fu.method(); 34 } 35 }?
轉載于:https://www.cnblogs.com/lz2lhy/p/6883573.html
總結
以上是生活随笔為你收集整理的Java笔记(08):面向对象--抽象类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mynt product model:
- 下一篇: java程序开发的简历_Java程序开发