- 抽象类不能被实例化,但是构造函数是有的
- 抽象父类的构造方法,可以完成类似于成员变量初始化的功能,从而使这个成员变量可以被子对象使用
父类:
/**** 抽象类 - 父类* 可以设置构造函数**/package Test13_Demo.Demo02;/*@create 2020--12--01--10:13*/public abstract class Employee {//属性private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 抽象类中的构造方法不能被程序直接调用,因为该类是一个抽象类,不能实例化对象* 但是在创建子类(普通类)的时候,子类构造函数会默认调用父类的无参构造函数,为了子类对象的父类存储空间赋值*///无参构造public Employee() {super();}//有参构造public Employee(String name) {super();this.name = name;}//定义成员方法 - 抽象方法public abstract void work();//抽象类中可以保存普通方法public void test() {System.out.println("我是一个普通方法");}}
子类(抽象类):
/**** 子类(抽象类)** 如果一个类在继承父类(抽象类)的时候,没有实现父类中的所有抽象方法,那么这个子类还是抽象类**/package Test13_Demo.Demo02;/*@create 2020--12--01--10:20*/public abstract class Cook extends Employee{}
子类(普通类):
/**** 定义一个普通类去实现父类(抽象类)中的所有的抽象方法!*/package Test13_Demo.Demo02;/*@create 2020--12--01--10:22*/public class Waiter extends Employee{@Overridepublic void work() {System.out.println("接客,上菜,结账");}public Waiter() {}/**** 子类的构造方法可以调用父类的构造方法* 这里,一个参数的子类构造,调用了父类的一个参数的构造,,为父类中的成员赋值* 但是最终还是子类对象自己使用了这个成员变量* @param name*///子类的有参构造public Waiter(String name) {super(name); //调用的父类(抽象类)中的有参构造方法}}
测试类:
/**** 抽象类不能被实例化,但是构造函数是有的** 抽象父类的构造方法,可以完成类似于成员变量初始化的功能,从而使这个成员变量可以被子对象使用***/package Test13_Demo.Demo02;/*@create 2020--12--01--10:11*/public class AbstractDemo {public static void main(String[] args) {//实例化的是子类,但是子类中的成员属性还是从父类中继承过来的!父类(抽象类)中的构造函数是有意义的Waiter waiter = new Waiter("Rose");waiter.work();//直接输出属性System.out.println(waiter.getName());}}
