面向对象4-3多态性

一、virtual(虚拟的)  override(覆盖)

根据上一篇得知,fly是bird父类,在bird中引用父级中的方法fly1(),返回值为"我可以飞"。但是在bird类中,引用父类的fly1()方法不能满足要求,需要返回的输出值为“我可以靠自己的翅膀飞行”。以此类推,在fly的各种子类中,都想表达出子类自身所具有的特征,那么此时,就需要对父类fly的方法进行修改,需要进行设置虚函数(virtual)。

//父类格式
public virtual 数据类型 名字()
{
执行语句
}
//子类中
public override 数据类型 数据名()
{
新的执行语句
}
//此时重新调用父类中的方法,就会显示新的执行语句!

1,同样都是继承了同一个父类,但父类中的方法并不适用任何一个子类,那么在这就需要重新编写这个方法的主体。

(1)需要父类同意子类可以重新编写自己的方法,关键词:virtual,在public之后

(2)子类只能重新写父类允许重写的方法,只能重写虚方法。关键词override,在public之后。

2,所有的类都可以当做父类,都可以有虚方法。

二、接口 interface

抽象类函数,关键词;abstract。抽象函数不能实例化。需要被继承,在子类里面调用其方法。

举例子吧

建立ren类

//在ren类里面设置虚函数
        public abstract string chi();       //注意,没有“{执行语句}”,因为即使写了,在子类中也不引用,需要再子类中重新编写
        public abstract string shui();
        public abstract string dong();
        public string yue()                  //不是抽象方法,为了证明抽象类里面也可以有非虚类函数
        {
            return "约会去了!!";
        }
        public virtual string yuyan()       //不是抽象方法,为了证明抽象类里面也可以有虚类函数
        {
            return "我会说hua!";
        }

抽象类函数就是为了被继承而出现的(他的建立就是为了当父类)。

普通的类中所有的方法都变为虚方法,没有人用最基础的方法(父类方法),在子类中需要重新编写,那么就不需要那么费劲的把普通类中的方法全部写完,于是,直接定义为抽象类,并且都写成抽象方法。

只声明方法的名称和返回值,具体方法是什么,继承过去以后自己(在子类中)去实现。

//新建一个nan类,继承ren类
public class nan:ren
    {
        public override string chi()   //跟virtual一样用override
        {
            return "大口大口的吃!";
        }
        public override string shui()
        {
            return "在女人身边睡觉!";
        }
        public override string dong()
        {
            return "打篮球";
        }//然后在main函数里面实例化nan,就可以调用nan和ren里面的函数了。

抽象方法一定在抽象类中。

有抽象方法的类,一定是抽象类。

抽象类中不一定只有抽象方法,也可以由其他的方法。

为了让nan这个类更加完善,还需要继承其他的类(如yule,gongzuo),那就需要接口了。

父类只能有一个,其余的都是借口。就像亲爹(父类)只有一个,其余的为干爹(接口interface)。

//新建gongzuo类
public interface gongzuo  //interface 原先位置为class。
    {
     string jineng();   //为抽象方法。数据类型+数据名字()。

     string didian();  

    }
//然后在nan类继承ren类的后面写个逗号,加上gongzuo,如下图,这样接口就好了。

然后就需要在nan类里面写接口里面的方法(必须写)

public class nan:ren
    {
        public override string chi()
        {
            return "大口大口的吃!";
        }
        public override string shui()
        {
            return "在女人身边睡觉!";
        }
        public override string dong()
        {
            return "打篮球";
        }
          public  string jineng()
       {
          return "巧妹子";
       }
       public string didian()
       {
           return "夜色";
       }//在main函数里面调用就可以了。

接口类里面的方法都是抽象方法(数据类型+数据名字()),没有其他一点儿东西。全部内容需要全部在子类中实现(在子类中一个方法都不能少)。

完!!!

时间: 2024-11-01 18:47:34

面向对象4-3多态性的相关文章

Java面向对象-对象的多态性

Java面向对象-对象的多态性 Java中的多态性表现: 1,方法的重载和重写(覆盖): 2,可以用父类的引用指向子类的具体实现,而且可以随时更换为其他子类的具体实现: 我们先搞个父类Animal: 1 package com.java1234.chap03.sec13; 2 3 public class Animal { 4 5 public void say(){ 6 System.out.println("我是一个动物"); 7 } 8 } 再搞两个子类,分别是Dog和Cat类,

面向对象-多态与多态性

多态是指的多种形态:比如水的多种形态:水,冰多态性:在不考虑实例类型情况下使用实例,多态性分为静态多态性和动态多态性静态多态性:如任何类型都可以用运算符+进行运算 多态:同一类事物的多种形态 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print(

面向对象特征之多态性

多态含义: 1.在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象. 2.在Java中,子类的对象可以替代父类的对象使用. ?一个变量只能有一种确定的数据类型 ?一个引用类型变量可能指向(引用)多种不同类型的对象 多态作用: 提高了代码的通用性,常称作接口重用. 注意事项: 1.需要存在继承或者实现关系. 2.在Java程序中有成员方法的重写. 3.成员变量不具备多态性,只看引用变量所声明的类. 成员方法:1.编译时:要查看引用变量所声明的类中是否有所调用的方法. 2.运行时:调用实际

PHP面向对象多态性的应用

多态是面向对象的三大特性中除封装和继承之外的另一重要特性.它展现了动态绑定的功能,也称为“同名异式”.多态的功能可让软件在开发和维护时,达到充分的延伸性.事实上,多态最直接的定义是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同反应效果.所谓多态性就是指一段程序能够处理多种类型对象的能力,在PHP中,多态值指的就是方法的重写.方法重写是指一个子类中可以重新修改父类中的某些方法,使其具有自己的特征.重写要求子类的方法和父类的方法名称相同,这可以通过声明抽象类或是接口来规范.我们通

Python 面向对象 组合-多态与多态性-封装-property

面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 1 class Foo: 2 xxx = 111 3 4 class Bar: 5 yyy = 222 6 7 obj = Foo() 8 obj.attr = Bar() 9 10 print(obj.xxx) 11 >>>111 12 print(obj.attr.yyy) 13 >>>222 2.为何要用组合 通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式

老调重弹--面向对象设计原则--S.O.L.I.D设计原则

SRP - 单一职责原则 全称:Single Responsibility Principle 定义:每一个上下文对象(类.函数.变量等等)的定义应该仅仅包含单一的职责 描述:对象提供单一职责的高度封装,对象的改变仅仅依赖于单一职责的改变,它基于软件设计中的高内聚性定义 出处:Robert C. Martin(Bob大叔)<Agile Software Development, Principles, Patterns, and Practices>2002 源头:Tom DeMarco &l

JAVA课程实验报告 实验二 JAVA面向对象程序设计

课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--20:50 仪器组次:         必修/选修: 选修            实验序号:2 实验目的: 1.掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了

实验二 Java面向对象程序设计 20135321

课程:Java程序设计   班级:1353    姓名:余佳源  学号:20135321 成绩:             指导教师:娄嘉鹏      实验日期:2015-5-8 实验密级:         预习程度:           实验时间:3:15~6:45 仪器组次:          必修/选修:选修       实验序号:2 实验名称:                Java面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继

java面向对象面试题

面试题目录:     一.JAVASE常见面试题 1. static和final区别?使用final关键字修饰一个变量时,           是引用不能变,还是引用的对象不能变?         2. "=="和equals方法究竟有什么区别?          3.  静态变量和实例变量的区别?         4.请说出作用域public,private,protected,以及不写时的区别            这四个作用域的可见范围如下表所示.         5.Overl

java面试准备之面向对象

面向对象 下面列出了面向对象软件开发的优点: (1) 代码开发模块化,更易维护和修改. (2) 代码复用. (3) 增强代码的可靠性和灵活性. (4) 增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象 Java面向对象的三个特征与含义 一.继承: 1.概念:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力 2.好处:提高代码的复用,缩短开发周期. 二.多态: 1.概念:多态(Polymorphism)按字面的意思就是"多种状态,