封装编程:不能调用子类的方法

问题遇到的现象和发生背景

封装编程:不能调用子类的方法

问题相关代码,请勿粘贴截图

package homework;

public class number14 {
Manger manger = new Manger("张小亮","M001","销售部");
Clerk clerk = new Clerk("李小亮","C001","销售部");
manger.setC(clerk);//setC方法不能调用
clerk.setM(manger);//setM方法不能调用
manger.show();//show方法不能调用
clerk.show();//show方法不能调用

}
//父类
//1. 定义员工Employee类。包含属性:姓名,工号,部门,成员方法show,方法内展示员工信息。
class Employee{
private String name;
private String id;
private String depart;
public Employee(){
super();
}
public Employee(String name,String id,String depart){
this.name = name;
this.id = id;
this.depart = depart;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getDepart() {
    return depart;
}

public void setDepart(String depart) {
    this.depart = depart;
}
public void show(){
    System.out.println(depart+"的:"+name+",员工编号:"+id);
}

}
//子类
//2. 定义经理Manger类继承Employee类,
// 包含属性:职员Clerk(类型为引用数据类型Clerk),
// 重写show方法,在父类实现基础之上增加展示职员信息。
class Manger extends Employee{
Clerk c;
public Manger(){
}
public Manger(String name,String id,String depart){
super(name,id,depart);
}

public void setC(Clerk c) {
    this.c = c;
}

public Clerk getC() {
    return c;
}
public void show(){
    super.show();
    System.out.println("他的职员是:"+c.getName());
}

}
//子类
//定义职员Clerk类继承Employee类,包含属性:经理Manager(类型为引用数据类型Manager),
// 重写show方法,在父类实现基础之上增加展示经理信息
class Clerk extends Employee{
Manger m;
public Clerk(){
}
public Clerk(String name,String id,String depart){
super(name,id,depart);
}

public void setM(Manger m) {
    this.m = m;
}

public Manger getM() {
    return m;
}
public void show(){
    super.show();
    System.out.println("他的经理是:"+m.getName());
}

}

运行结果及报错内容

方法不能调用,不能运行

我想要达到的结果

可以调用方法并且运行

把下面这段代码放入main方法中就可以了。

public class number14 {

    public static void main(String[] args) {
        Manger manger = new Manger("张小亮","M001","销售部");
        Clerk clerk = new Clerk("李小亮","C001","销售部");
        manger.setC(clerk);//setC方法不能调用
        clerk.setM(manger);//setM方法不能调用
        manger.show();//show方法不能调用
        clerk.show();//show方法不能调用
    }

}
//父类
//1. 定义员工Employee类。包含属性:姓名,工号,部门,成员方法show,方法内展示员工信息。
class Employee{
private String name;
private String id;
private String depart;
public Employee(){
super();
}
public Employee(String name,String id,String depart){
this.name = name;
this.id = id;
this.depart = depart;
}

public String getName() {
    return name;
}
 
public void setName(String name) {
    this.name = name;
}
 
public String getId() {
    return id;
}
 
public void setId(String id) {
    this.id = id;
}
 
public String getDepart() {
    return depart;
}
 
public void setDepart(String depart) {
    this.depart = depart;
}
public void show(){
    System.out.println(depart+"的:"+name+",员工编号:"+id);
}
}
//子类
//2. 定义经理Manger类继承Employee类,
// 包含属性:职员Clerk(类型为引用数据类型Clerk),
// 重写show方法,在父类实现基础之上增加展示职员信息。
class Manger extends Employee{
Clerk c;
public Manger(){
}
public Manger(String name,String id,String depart){
super(name,id,depart);
}

public void setC(Clerk c) {
    this.c = c;
}
 
public Clerk getC() {
    return c;
}
public void show(){
    super.show();
    System.out.println("他的职员是:"+c.getName());
}
}
//子类
//定义职员Clerk类继承Employee类,包含属性:经理Manager(类型为引用数据类型Manager),
// 重写show方法,在父类实现基础之上增加展示经理信息
class Clerk extends Employee{
Manger m;
public Clerk(){
}
public Clerk(String name,String id,String depart){
super(name,id,depart);
}

public void setM(Manger m) {
    this.m = m;
}
 
public Manger getM() {
    return m;
}
public void show(){
    super.show();
    System.out.println("他的经理是:"+m.getName());
}
}

img