1. 程式人生 > 實用技巧 >五(十五)、abstract & 他的匿名子類

五(十五)、abstract & 他的匿名子類

abstract關鍵字使用
1.abstract:抽象的;
2.abstract可以用來修飾的結構:類 方法
3.abstract修飾類:抽象類
此類不能例項化
抽象類中一定有構造器;便於子類物件例項化的時候呼叫(涉及子類物件例項化的全過程)
開發中,都會提供抽象類的子類,讓子類物件例項化,完成相關操作;
4.abstract修飾方法:抽象方法
抽象方法只有方法宣告,沒有方法體
包含抽象方法的類,一定是一個抽象類;,反之,抽象類可以沒有抽象方法;
若子類重寫了父類中的所有抽象方法(不光是直接父類,還有間接父類)後,此子類方可例項化;
若子類沒有重寫了父類中的所有抽象方法(不光是直接父類,還有間接父類)後,則此子類也是一個抽象類,

需要使用abstract修飾

5.使用注意點:
a.abstract不能用來修飾:屬性、構造器;
b.abstract 不能用來修飾私有方法、靜態方法,final的方法;

 1 public class Day15Abstract6 {
 2     public static void main(String[] args) {
 3         //不可被例項化
 4 //        Persons7 p1 = new Persons7();
 5 //        p1.eat();
 6     }
 7 }
 8 abstract class Persons7{
 9     String name;
10 int age; 11 int id = 1001;//身份證號 12 13 public Persons7() { 14 } 15 public Persons7(String name, int age) { 16 this.name = name; 17 this.age = age; 18 } 19 20 public void eat() { 21 System.out.println("吃飯"); 22 } 23 24 //抽象方法,只有方法的宣告,沒有方法體;
25 public abstract void eat1(); 26 27 public void walk() { 28 System.out.println("走了"); 29 } 30 } 31 class student7 extends Persons7{ 32 33 @Override 34 public void eat1() { 35 // TODO Auto-generated method stub 36 System.out.println("學生多吃有營養的"); 37 } 38 39 }

抽象類的匿名子類:

 1 public class Day15AnonymousSubClass10 {
 2     public static void main(String[] args) {
 3         method(new Student());//匿名物件
 4         Worker worker = new Worker();
 5         method1( worker);//非匿名的類的非匿名的物件
 6         method1(new Worker());//非匿名的類的匿名物件
 7         Persons7 p = new Persons7() {//建立了一匿名子類的物件
 8 
 9             @Override
10             public void eat1() {
11                 // TODO Auto-generated method stub
12                 
13             }
14             
15         };
16         
17         method1(new Persons7() {//建立了一匿名子類的匿名物件
18 
19             @Override
20             public void eat1() {
21                 // TODO Auto-generated method stub
22                 
23             }
24             
25         });
26     }
27     
28     public static void method(Student s) {
29         
30     }
31     public static void method1(Persons7 p) {
32         p.eat1();
33         p.walk();
34     }
35     
36     
37 }
38 class Worker extends Persons7{
39 
40     @Override
41     public void eat1() {
42         
43     }
44     
45 }