2019-10-24-23:21:17
目录
1.抽象的方法
2.抽象类
3.抽象类和抽象方法的使用
4.抽象类的注意事项
5.案例代码
1.抽象的方法
What:如果父类当中的方法不确定如何进行{}方法体实现,那么这就是一个抽象方法。
抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束。
抽象类:抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。
2.抽象类
抽象类除了包含抽象方法外,还可以包含具体的变量和具体的方法。类即使不包含抽象方法,也可以被声明为抽象类,防止被实例化
3.抽象类和抽象方法的使用
1.不能直接创建new抽象类对象。
2.必须用一个子类来继承抽象父类。
3.子类必须覆盖重写抽象父类当中所有的抽象方法。
覆盖重写(实现) :子类去掉抽象方法的abstract关键字,然后补上方法体大括号。
4.创建子类对象进行使用
4.抽象类的注意事项
1.抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
3.抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
4.抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
5.抽象类不能被实例化,抽象方法必须在子类中被实现
5.案例代码
1 package demopra; 2 //定义一个抽象类 3 abstract class Employees { 4 //定义一个变量 5 private String name; 6 //空参构造方法 7 public Employees() { 8 } 9 //全参构造方法 10 public Employees(String name) { 11 this.name = name; 12 } 13 //定义一个抽象方法 14 public abstract void work(); 15 16 // @Override 17 // public String toString() { 18 // return "Employees{" + 19 // "name='" + name + '\'' + 20 // '}'; 21 // } 22 //Getter和Setter 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 public String getName() { 28 return name; 29 } 30 }
1 package demopra; 2 //定义一个抽象类的子类 3 public class Teacher extends Employees{ 4 //必须实现的方法,重写父类中的方法 5 @Override 6 public void work() { 7 System.out.println("我叫"+this.getName()+",是你们这学期的班主任"); 8 } 9 }
1 package demopra; 2 //定义一个抽象类的子类 3 public class Driver extends Employees{ 4 //必须实现的方法,重写父类中的方法 5 @Override 6 public void work() { 7 System.out.println("我叫"+this.getName()+",是一名出租车司机"); 8 } 9 }
1 package demopra; 2 3 public class AbstractTest { 4 public static void main(String[] args) { 5 //创建一个Teacher对象 6 Teacher teacher = new Teacher(); 7 //为Teacher对象添加一个名字 8 teacher.setName("张三"); 9 //执行重写的方法 10 teacher.work(); 11 12 //创建一个Driver对象 13 Driver driver = new Driver(); 14 //为Driver对象添加一个名字 15 driver.setName("李四"); 16 //执行重写的方法 17 driver.work(); 18 } 19 }
运行结果
我叫张三,是你们这学期的班主任
我叫李四,是一名出租车司机