[Day23] CH11:刘姥姥逛物件导向的世界——多型

今天要来接续昨天没介绍完的物件导向的第三个特性——多型。

多型(Polymorphism)

父类别可透过子类别衍伸成多种型态,而父类别为子类别的通用型态,再透过子类别可覆写父类别的方法来达到多型的效果,也就是同样的方法名称会有多种行为。由昨天的范例来看:

public class Zoo2{
    public static void main(String[] args){
        Animal s1 = new Sheep("绵羊1号","黑色");
        Animal s2 = new Sheep();
        s2.setName("绵羊2号");
        //s2.setWoolColor("白色"); 错误
        System.out.println(s1.getName() + s1.move(10)); //s1.getWoolColor() 错误
        System.out.println(s2.getName() + s2.move(5));   //s2.getWoolColor() 错误
    }
}

class Animal{
    private String name;
    
    public Animal(){

    } 
    
    public Animal(String name){
        this.name = name;
    }

    public String move(int units){
        return "移动" + units + "步";
    }

    public String getName(){
        return name;
    }

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

class Sheep extends Animal{
    private String woolColor;

    public Sheep(){
        super();
    }

    public Sheep(String name, String woolColor){
        super(name);
        this.woolColor = woolColor;
    }

    public void setWoolColor(String woolColor){
        this.woolColor = woolColor;
    }

    public String getWoolColor(){
        return woolColor;
    }

    @Override
    public String move(int units){
        return "跑" + units + "步";
    }
}
绵羊1号跑10步
绵羊2号跑5步

我们看到在 main() 中, s1 与 s2 的型态是 Animal,这个动作就是「多型」,但是与昨天不同的是,如此一来 Sheep 类别中的方法就无法使用(如注解所示)。

还有最後两个「抽象」和「介面」的概念,但为了怕大家一天吸收太多,今天就先到这里就好,明天我们就要结束这回合了,敬请期待~


<<:  [Day23] Angular 简介

>>:  WhatsApp Business 商业帐号的独特功能

Day26 指派角色给使用者

昨天角色的 CRUD 功能都完成了,接着就是要把角色指派给使用者了,先建立一个 ViewModel ...

第44篇-df命令

今天进度 : 鸟哥的 Linux 私房菜 -- 连上 Internet 的方法与步骤 尝试使用 df...

BigO

##使用BigO来衡量程序码的时间复杂度(time complexity)是很重要的一件事情,接下来...

【领域展开 11 式】网站制作中,请 Google 不要搜寻到我 > <

网页施工中,请稍後再回来 虽然昨天将子母主题做汇入,本来今天预定要选定主题做汇入,但是在参考两篇文章...

[Day 10] - Spring Boot 实作登入验证(四)(JWT登入验证)

今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...