1 package com.bytezreo.abstractTest; 2 3 /** 4 * 5 * @Description Abstract 关键字使用 6 * @author Bytezero·zhenglei! Email:420498246@qq.com 7 * @version 8 * @date 下午7:17:11 9 * @ 1.abstract:抽象的 10 * 2.abstract可以用来修饰的结构:类,方法 11 * 12 * 3.abstract可以用来修饰类:抽象类 13 * > 此类不能实例化 14 * > 抽象类中一定有构造器,便于子类实例化时调用(子类对象实例化的全过程) 15 * > 开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作 16 * 17 * 18 * 19 * 4.abstract修饰方法:抽象方法 20 * > 抽象方法只有方法的声明,没有方法体 21 * > 包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的 22 * > 若子类重写了父类中的所有抽象方法后,此子类方可实例化 23 * 若子类没有重写父类中的所有抽象方法,则此子类也是一个抽象类,需要使用 24 * abstract修饰 25 * 26 * abstract使用上的注意点: 27 * 1.abstract 不能用来修饰:属性,构造器等结构 28 * 29 * 2.abstract不能用来修饰私有方法、静态方法、final的方法、final的类 30 * 31 * 32 */ 33 public class AbstractTest { 34 public static void main(String[] args) { 35 36 //一旦 Person类抽象了,不可实例化 37 // Person p1 = new Person(); //abstract 不能造对象 38 // p1.eat(); 39 40 41 42 43 } 44 45 } 46 47 abstract class Creature{ 48 49 public abstract void breath(); 50 } 51 52 abstract class Person extends Creature { 53 54 String name; 55 int age; 56 57 public Person() { 58 59 60 } 61 public Person(String name,int age) { 62 63 this.name = name; 64 this.age = age; 65 } 66 67 // public void eat() 68 // { 69 // System.out.println("人吃饭"); 70 // } 71 72 //抽象方法 73 public abstract void eat(); 74 75 public void walk() 76 { 77 System.out.println("人走路"); 78 } 79 80 } 81 82 83 class Student extends Person{ 84 85 public Student(String name,int age) { 86 super(name,age); 87 } 88 public Student() { 89 90 } 91 92 93 public void eat() { 94 System.out.println("学生吃饭!!"); 95 } 96 97 98 @Override 99 public void breath() { 100 // TODO Auto-generated method stub 101 System.out.println("学生呼吸!!!!"); 102 } 103 104 105 }
1 package com.bytezreo.abstractTest; 2 3 /** 4 * 5 * @Description 关于抽象类匿名子类 6 * @author Bytezero·zhenglei! Email:420498246@qq.com 7 * @version 8 * @date 上午8:10:06 9 * @ 10 * 11 */ 12 public class PersonTest { 13 14 public static void main(String[] args) { 15 16 method(new Student()); //匿名对象 17 System.out.println("*************"); 18 19 Worker worker = new Worker(); 20 21 method1(worker); //非匿名的类 非匿名的对象 22 23 method1(new Worker()); // 非匿名的类 匿名的对象 24 25 System.out.println("**********************************"); 26 27 //创建了 匿名类的对象:P1 Person的子类 28 Person p1 = new Person() { 29 30 @Override 31 public void eat() { 32 // TODO Auto-generated method stub 33 System.out.println("吃东西------抽象重写"); 34 35 } 36 37 @Override 38 public void breath() { 39 // TODO Auto-generated method stub 40 System.out.println("呼吸-----抽象重写"); 41 42 } 43 44 // 45 // public void walk() 46 // { 47 // System.out.println("人走路------抽象重写"); 48 // } 49 // 50 51 52 53 }; 54 55 method1(p1); 56 System.out.println("**********************************"); 57 58 //创建匿名子类的匿名对象 59 method1(new Person() { 60 61 @Override 62 public void eat() { 63 // TODO Auto-generated method stub 64 System.out.println("吃东西---创建匿名子类的匿名对象"); 65 66 } 67 68 @Override 69 public void breath() { 70 // TODO Auto-generated method stub 71 System.out.println("呼吸---创建匿名子类的匿名对象"); 72 73 } 74 75 76 77 }); 78 79 } 80 81 public static void method1(Person p) { 82 83 p.eat(); 84 p.walk(); 85 p.breath(); 86 } 87 88 89 public static void method(Student s) { 90 91 } 92 } 93 94 95 96 97 class Worker extends Person{ 98 99 @Override 100 public void eat() { 101 102 103 } 104 105 @Override 106 public void breath() { 107 108 109 } 110 111 }