五(十五)、abstract & 他的匿名子類
阿新 • • 發佈:2020-08-06
abstract關鍵字使用
1.abstract:抽象的;
2.abstract可以用來修飾的結構:類 方法
3.abstract修飾類:抽象類
此類不能例項化
抽象類中一定有構造器;便於子類物件例項化的時候呼叫(涉及子類物件例項化的全過程)
開發中,都會提供抽象類的子類,讓子類物件例項化,完成相關操作;
4.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 }