Java笔记(08):面向对象--抽象类
生活随笔
收集整理的這篇文章主要介紹了
Java笔记(08):面向对象--抽象类
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、抽象類概述:
1 /* 2 抽象類的概述: 3 動(dòng)物不應(yīng)該定義為具體的東西,而且動(dòng)物中的吃,睡等也不應(yīng)該是具體的。 4 我們把一個(gè)不是具體的功能稱為抽象的功能,而一個(gè)類中如果有抽象的功能,該類必須是抽象類。 5 6 抽象類的特點(diǎn): 7 A:抽象類和抽象方法必須用abstract關(guān)鍵字修飾 8 B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類 9 C:抽象類不能實(shí)例化 10 因?yàn)樗皇蔷唧w的。 11 抽象類有構(gòu)造方法,但是不能實(shí)例化?構(gòu)造方法的作用是什么呢? 12 用于子類訪問(wèn)父類數(shù)據(jù)的初始化 13 D:抽象的子類 14 a:如果不想重寫(xiě)抽象方法,該子類是一個(gè)抽象類。 15 b:重寫(xiě)所有的抽象方法,這個(gè)時(shí)候子類是一個(gè)具體的類。 16 17 抽象類的實(shí)例化其實(shí)是靠具體的子類實(shí)現(xiàn)的。是多態(tài)的方式。 18 Animal a = new Cat(); 19 */ 20 21 //abstract class Animal //抽象類的聲明格式 22 abstract class Animal { 23 //抽象方法 24 //public abstract void eat(){} //空方法體,這個(gè)會(huì)報(bào)錯(cuò)。抽象方法不能有主體 25 public abstract void eat(); 26 27 public Animal(){} 28 } 29 30 //子類是抽象類 31 abstract class Dog extends Animal {} 32 33 //子類是具體類,重寫(xiě)抽象方法 34 class Cat extends Animal { 35 public void eat() { 36 System.out.println("貓吃魚(yú)"); 37 } 38 } 39 40 class AbstractDemo { 41 public static void main(String[] args) { 42 //創(chuàng)建對(duì)象 43 //Animal是抽象的; 無(wú)法實(shí)例化 44 //Animal a = new Animal(); 45 //通過(guò)多態(tài)的方式 46 Animal a = new Cat(); 47 a.eat(); 48 } 49 }2、抽象類的成員特點(diǎn):
1 /* 2 抽象類的成員特點(diǎn): 3 成員變量:既可以是變量,也可以是常量。 4 構(gòu)造方法:有。 5 用于子類訪問(wèn)父類數(shù)據(jù)的初始化。 6 成員方法:既可以是抽象的,也可以是非抽象的。 7 8 抽象類的成員方法特性: 9 A:抽象方法 強(qiáng)制要求子類做的事情。 10 B:非抽象方法 子類繼承的事情,提高代碼復(fù)用性。 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 //創(chuàng)建對(duì)象 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 構(gòu)造方法:無(wú)參,帶參 10 成員方法:吃飯(貓吃魚(yú)) 11 12 狗: 13 成員變量:姓名,年齡 14 構(gòu)造方法:無(wú)參,帶參 15 成員方法:吃飯(狗吃肉) 16 17 因?yàn)橛泄残缘膬?nèi)容,所以就提取了一個(gè)父類。動(dòng)物。 18 但是又由于吃飯的內(nèi)容不一樣,所以吃飯的方法是抽象的, 19 而方法是抽象的類,類就必須定義為抽象類。 20 21 抽象動(dòng)物類: 22 成員變量:姓名,年齡 23 構(gòu)造方法:無(wú)參,帶參 24 成員方法:吃飯(); 25 26 實(shí)現(xiàn):從抽象到具體 27 動(dòng)物類: 28 成員變量:姓名,年齡 29 構(gòu)造方法:無(wú)參,帶參 30 成員方法:吃飯(); 31 32 狗類: 33 繼承自動(dòng)物類 34 重寫(xiě)吃飯(); 35 36 貓類: 37 繼承自動(dòng)物類 38 重寫(xiě)吃飯(); 39 */ 40 //定義抽象的動(dòng)物類 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 //定義一個(gè)抽象方法 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("貓吃魚(yú)"); 97 } 98 } 99 100 //測(cè)試類 101 class AbstractTest { 102 public static void main(String[] args) { 103 //測(cè)試狗類 104 //具體類用法 105 //方式1: 106 Dog d = new Dog(); 107 d.setName("旺財(cái)"); 108 d.setAge(3); 109 System.out.println(d.getName()+"---"+d.getAge()); 110 d.eat(); 111 //方式2: 112 Dog d2 = new Dog("旺財(cái)",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("旺財(cái)"); 119 a.setAge(3); 120 System.out.println(a.getName()+"---"+a.getAge()); 121 a.eat(); 122 123 Animal a2 = new Dog("旺財(cái)",3); 124 System.out.println(a2.getName()+"---"+a2.getAge()); 125 a2.eat(); 126 127 //練習(xí):測(cè)試貓類 128 } 129 }3、abstrace不能和哪些關(guān)鍵字共存:
1 /* 2 一個(gè)類如果沒(méi)有抽象方法,可不可以定義為抽象類?如果可以,有什么意義? 3 A:可以。 4 B:不讓創(chuàng)建對(duì)象。 5 6 abstract不能和哪些關(guān)鍵字共存? 7 private 沖突 8 final 沖突 9 static 無(wú)意義 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 }?
轉(zhuǎn)載于:https://www.cnblogs.com/lz2lhy/p/6883573.html
總結(jié)
以上是生活随笔為你收集整理的Java笔记(08):面向对象--抽象类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mynt product model:
- 下一篇: 大神级ppt作品欣赏_超写实绘画,逼真到