『Java』多态、抽象、继承、封装的简单例子

80 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

多态

	Printer a = new ColorPrinter();
    Printer b = new MonochromePrinter();

	private static void typeChoose(Printer a){
        a.typePrint();

        if(a instanceof ColorPrinter) {
            ColorPrinter c = (ColorPrinter)a;
            c.inkAdd();
        }else{
            MonochromePrinter c = (MonochromePrinter)a;
            c.inkAdd();
        }

新建父类变量并将其赋为子类(子类是父类的特例情况) 通过obj instanceof Class运算符判断其类型 创建非抽象类对象,执行子类方法 父类对象调用了抽象方法

“封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一并封装在一个有机的实体中,把它们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块性提供良好的基础。在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚、低耦合”的“最佳状态”便是面向对象技术的封装性所需要实现的最基本的目标。对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底了解清楚的,用户只需要通过封装外的通道对计算机进行相关方面的操作即可。大大地简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。”——百度百科

抽象、继承

abstract class Printer{
    abstract void typePrint();
}

class ColorPrinter extends Printer{
    protected void typePrint(){
        System.out.println("\\033[Hello World!m");
    }
    void inkAdd(){
        System.out.println("Colorful ink added");
    }
}

class MonochromePrinter extends Printer{
    protected  void typePrint(){
        System.out.println("Hello World!");
    }
    void inkAdd(){
        System.out.println("Black ink added");
    }
}

父类为抽象类,包含抽象方法,抽象方法无方法体。子类继承父类。父类调用抽象方法时会依据具体传入对象而选择执行对应类的同名方法。若无抽象方法,调用无法实现。

·“继承性是面向对象技术中的另外一个重要特点,其主要指的是两种或者两种以上的类之间的联系与区别。继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。如果按照继承源进行划分,则可以分为单继承(一个对象仅仅从另外一个对象中继承其相应的特点)与多继承(一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象);如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承(一个对象在继承另一个对象的能力与特点之后将父对象进行取代)、包含继承(一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于等于父对象,实现了对于父对象的包含)、受限继承、特化继承。” ——百度百科

·“从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时接收到同一个完全相同的消息之后,所表现出来的动作是各不相同的,具有多种形态;从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,即便这若干个具有相同函数名的函数所表示的函数是不同的。” ——百度百科

封装

private static void typeChoose(Printer a){}
//只在public class内部调用
protected void typePrint(){}
//同一包调用
void inkAdd(){}
//继承类调用