Java(五)——多态

1. 对象的多态性

        1.1 对象多态性前提

                必须有继承或者是接口的实现

                必须有方法的重写

        多态的语法规则

                父类  变量(对象名)  =  new  子类对象();   //多态写法

                 多态中:对象调用父类的方法,执行的是子类的方法的重写。

        1.2 多态中成员特点

                1.2.1 多态中成员变量的特点     (编译看左运行看左

                        编译时:若父类中没有成员变量,编译失败

                        运行时:运行父类中的成员变量,与子类中的成员变量无关

                1.2.2 多态中成员方法的特点     (编译看左运行看右

                        编译时:若父类中没有成员变量,编译失败

                        运行时:运行子类的方法重写

        1.3 多态的转型

                多态的程序中,不能调用子类的特有成员!!

                只能调用子类父类的共有成员!!

                        转型公式:

                                转型后的类型    变量名  =  (转后类型) 要转的数据

public class PolymorphicTest {
    public static void main(String[] args) {
        //创建对象,多态性
        //父类 = new 任意子类对象() 扩展
        Animal animal = new Cat();
        animal.eat();
//        animal.catchMouse();  //没有catchMouse这个方法
        //Cat类的特有功能 catchMouse()方法
        //类型转换,强制
        //Cat提升为了Animal,转回Cat类型
        Cat c = (Cat)animal;
        //至此c失去多态性 属于子类对象
        c.catchMouse();
    }
}

 补充: 多态性提升扩展性,是否需要强制转换,根据实际功能需求来决定.

        1.4 多态中的转型异常

异常ClassCastException 类型转换异常,在多态中经常发生.

是在进行类型的强制转换的时候发生,我们现在的案例是Dog不能转成Cat.

需要解决这个异常 : 对象是Cat转Cat,是Dog换Dog

运算符 : 比较运算符,结果是boolean类型

运算符是关键字 instanceof

instanceof的语法格式:

instanceof的语法格式:

对象名 instanceof  类的名字

解析: 比较这个对象,是不是由这个类产生的 c instanceof Cat  

解释: c对象是不是Cat类产生的,如果是结果就是true

        1.5 多态转型案例

* 定义Person类,本案例中,是最高的父类
* 属性:
*      姓名name(String类型),地址address(String类型)
*      电话号码telphone(String类型)和电子邮件地址email(String类型)
* 雇员类 是人类的一种,继承Person
* 属性:
*      办公室 office(String类型),工资 wage(String类型),
*      受雇日期 hiredate(String类型),
* 3)    Faculty类中的属性有:学位degree(String类型),级别level(String类型);
* 4)    Staff类中的属性有:职务称号duty(String类型)。
*  5)   现有对象Person p1 =new Faculty()和
*  Personp2 =new Staff (),
*  请分别为p1的属性学位degree赋值“本科”和Staff类的duty赋值“职员”
public class PolymorphicTest {
    public static void main(String[] args) {
        // 多态创建对象
        Person p1 = new Faculty();
        Person p2 =new Staff ();
        // p1对象的属性赋值本科degree子类的特有成员
        // 判断p1对象是不是Faculty类产生
        if(p1 instanceof Faculty){
            Faculty p11 = (Faculty) p1;
            p11.setDegree("本科");
            System.out.println(p11.getDegree());
        }
        if (p2 instanceof Staff){
            Staff p22 = (Staff) p2;
            p22.setDuty("职员");
            System.out.println(p22.getDuty());
        }
    }
}
public class Person {
    private String name;
    private String address;
    private String telphone;
    private String email;
    // alt + insert
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getTelphone() {
        return telphone;
    }
    public void setTelphone(String telphone) {
        this.telphone = telphone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}
public class Employee extends Person{
    private String office;
    private String wage;
    private String hiredate;
    public String getOffice() {
        return office;
    }
    public void setOffice(String office) {
        this.office = office;
    }
    public String getWage() {
        return wage;
    }
    public void setWage(String wage) {
        this.wage = wage;
    }
    public String getHiredate() {
        return hiredate;
    }
    public void setHiredate(String hiredate) {
        this.hiredate = hiredate;
    }
}
public class Faculty extends Employee{
    static String degree;
    static String level;
    public static String getDegree() {
        return degree;
    }
    public static void setDegree(String degree) {
        Faculty.degree = degree;
    }
    public static String getLevel() {
        return level;
    }
    public static void setLevel(String level) {
        Faculty.level = level;
    }
}
public class Staff extends Employee{
    private String duty;
    public String getDuty() {
        return duty;
    }
    public void setDuty(String duty) {
        this.duty = duty;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值