(多态)子类实例赋给父类引用的简单例子

注意(子类实例赋给父类引用):

  • 父类引用不能调用子类中特定方法;
  • 父类引用调用的是子类重写或实现父类的方法,引用变量是子类对象的地址。

创建一个抽象类Teacher,包括name属性和TeachClass()方法;

public abstract class Teacher {
    /**
    *name:老师姓名,字符类型
    *TeachClass:老师讲课,继承多态的抽象方法
    */
    String name;
    public abstract void TeachClass();
}

为Teacher创建两个子类:JavaTeacher、PhpTeacher;

public class JavaTeacher extends Teacher {
    public JavaTeacher(){
        this.name="哈哈哈";
    }
    public JavaTeacher(String name) {
        this.name = name;
    }
    /**
    *实现讲课的第一种形态
    */
    public void TeachClass() {
        System.out.println("java老师"+this.name+"正在教课");
    }
}

public class PhpTeacher extends Teacher{
    public PhpTeacher(){
        this.name="嘿嘿嘿";
    }   
    public PhpTeacher(String name) {
        this.name = name;
    }
    /**
    *实现讲课的第二种形态
    */
    public void TeachClass(){
        System.out.println("php老师"+this.name+"正在教课");
    }
}

创建一个Leader类,有CheckTeach()方法;

public class Lender {
   /**
    *检测老师教学
    */
    public void CheckTeach(Teacher t){
        // 老师开始讲课
        t.TeachClass();
    }
}

创建测试类TestTeacher;

在创建Teacher子类对象时,用父类类型的变量接收,这样可以保证在Leader类中不用为每一个Teacher子类写CheckTeach()方法。

public class TestTeacher {
    public static void main(String[] args) {
        // 子类实例赋给父类引用
        Teacher jt= new JavaTeacher();
        Teacher pt= new PhpTeacher("yoyoyoyo...");
        Lender lender = new Lender();
        lender.CheckClass(jt);
        lender.CheckClass(pt);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值