使用Java实现面向对象编程——第三章 多态

1、多态:(polymorphism):


是具有表现多种形态能力的特征;


(专业化的说法:)同一个实现接口(引用类型),使用不同的实例而执行不同的操作


指一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。


多态是同一个行为具有多个不同表现形式或形态的能力,

多态就是同一个接口,使用不同的实例而执行不同操作,多态性是对象多种表现形式的体现。


多态的优点:

  1. 消除类型之间的耦合关系

  2. 可替换性

  3. 可扩充性

  4. 接口性

  5. 灵活性

  6. 简化性

  7、可以减少类中代码量

  8、可以提高代码的拓展性和可维护性


多态存在的三个必要条件:

继承

重写

父类引用指向子类对象

2、实现多态:


实现多态的三个要素:

    编写具有继承关系的父类和子类;

  子类重写父类方法;

  使用父类的引用指向子类的对象;


实现多态的两种方式(继承和接口):


使用父类作为方法形参实现多态:

  Eg:使用多态优化主人给宠物喂食;

    


使用父类作为方法返回值实现多态:


示例(错误):

      


Eg1:多态的形式1:父类Pet做形参,子类做实参;


狗类(子类):

     

企鹅类(子类):

    

猫类(子类):

    

主人类:

    


测试类:

输出结果:

     


Eg2:多态的形式2:父类做引用类型,子类实例化;


测试类(其他类见eg1)


运行结果(注意蓝色部分):


Eg3:父类作为方法返回值,自类实例化,类型自动转换;


主人类(在eg1的主人类上增加代码):


测试类(其他类见eg1):

运行结果:

3、转换:


向上转型:子类到父类的转换;

  //自动转型

  Pet pet=new Dog();


Eg:向下转换:

主人类:

public class Master {

       public void play(Pet pet){

               if (pet instanceof Dog) {    //如果传入的是狗狗

                Dog dog = (Dog) pet;

                dog.catchingFlyDisc();

       }else if (pet instanceof Penguin) {   //如果传入的是企鹅

                Penguin pgn = (Penguin) pet;

                pgn.swimming();

       }

       }

}


向下转型:父类到子类的转换(强制类型转换):

    ●instanceof运算符:instanceof通常和强制类型转换结合使用

    语法:

      对象  instanceof  类或接口    


Eg1:实现宠物玩的方法:


子类和宠物类:    

   


主人类:


测试类:


输出结果:


Eg2

public class Test {

public static void main(String[] args) {

show(new Cat());  // 以 Cat 对象调用 show 方法

show(new Dog());  // 以 Dog 对象调用 show 方法

Animal a = new Cat();  // 向上转型

a.eat();               // 调用的是 Cat 的 eat

Cat c = (Cat)a;        // 向下转型

c.work();        // 调用的是 Cat 的 catchMouse

}

public static void show(Animal a)  {

a.eat();

// 类型判断

if (a instanceof Cat)  {  // 猫做的事情

Cat c = (Cat)a;

c.work();

} else if (a instanceof Dog) { // 狗做的事情

Dog c = (Dog)a;

c.work();

}

}

}

abstract class Animal {

abstract void eat();

}

class Cat extends Animal {

public void eat() {

System.out.println("吃鱼");

}

public void work() {

System.out.println("抓老鼠");

}

}

class Dog extends Animal {

public void eat() {

System.out.println("吃骨头");

}

public void work() {

System.out.println("看家");

}

}

4、  附加:


●父类引用指向子类对象,引用对象只能调用子类重写父类的方法并不能调用子类特有的方法。不然会报错;

实现多态的条件:继承的存在、子类重写父类的方法、父类引用变量指向子类对象;

 

●子类转换为父类(将一个父类的引用指向一个子类对象),称为向上转型;

●一个类继承父类,且都有方法重载的过程,在调用的时候如果该子类有该方法,则用该子类方法,如果该子类没有该方法则调用父类的该方法;

●继承体系下,如果没有用super关键字指定调用属性和方法,先在子类中,再去父类找;

●Java中的继承和多态。用父类声明,实例化父类对象,调用的是父类中的方法。


用子类声明,实例化子类,调用的是子类中的方法。

用父类声明,实例化子类,调用的是子类中的重写方法。


●子类对象赋值给父类引用,此时调用的方法是被子类重写的方法。

 

原文地址:https://www.cnblogs.com/HQING/p/9497490.html

时间: 2024-08-15 12:41:56

使用Java实现面向对象编程——第三章 多态的相关文章

使用Java实现面向对象编程——第四章 异常

1. 接口:接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来. 接口是更加抽象的抽象的类, 抽象类里的方法可以有方法体, 接口里的所有方法都没有方法体. 接口体现了程序设计的多态和高内聚低偶合的设计思想. 接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现. 接口可以看作一种特殊的"抽象类",但是采用与抽象类按群不同的语法来表示: 抽象类有利于代码的重用,接口有利于代码的扩展和维护: 接口的特性: 接口不

使用Java实现面向对象编程——第六章 框架集合

1.集合框架包含的主要内容及彼此之间的关系: 图1:   集合框架:是为了表示和操作集合而统一规定的一种统一的标准体系结构.               包含三大块的内容:对外的接口.接口的是实现和对集合运算的算法: Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中:       ●接口:表示集合的抽象数据类型,在图1中用虚线框表示,下图绿色的:                    ●实现:集合框架中接口的具体实现,图1中一实线表示,粗实线表示常用的:上图

使用Java实现面向对象编程——第五章 异常

1. 尝试通过if-else来解决异常问题: Eg: public class Test2 {       public static void main(String[] args) {             Scanner in = new Scanner(System.in);             -             System.out.print("请输入除数:");             int num2 = 0;             if (in.ha

关于java中面向对象编程的一点点小感悟!!!

断断续续接触java已经有半年的时间,当然中间也有过很多事情,不得已而中断了java的学习.当初刚刚接触到java的时候,总是不能理解java的面向对象编程优点.平常生活中我们做事情的思维方式都是面向过程的,就拿最简单的我要上一个培训班来说: 第一步:当然得是网上.贴吧.朋友的口中来了解这个辅导班,以此来决定是否需要上这个辅导班. 第二步:当然就是当了解完成之后,对这个辅导班比较满意.自己就需要做准备来达到辅导班的要求,比如说学费.复习知识,准备参加辅导班规定的考试. 第三步:当然就是付诸实践,

JAVA的面向对象编程--------课堂笔记

JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.   为什么要使用面向对象: 首先,面向对象符合人类看待事物的一般规律. 对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节. 方法的定义非常重要.方法有参

复习第三章多态

第三章  多态 本章需要掌握的东西 掌握多态的优势和应用场合 答:多态的优势可以减少代码量,更加清晰明了.,应用场合为,一个事物需要做多种事情的时候需要用到多态. 2.掌握父类和子类之间的类型转换 答:父类引用转向子类为向上转型,自动类型转换.子类引用转向父类为向下类型转换,需要强制转换. 3.掌握instanceof运算符的使用 答:这个不是很实用了解一下就OK,我了解的是 这个可以判断类型转换的东西. 4.使用父类作为返回值实现多态 答:如果要返回多个子类的值,可以使用父类作为返回值,父类包

java面向对象编程— —第七章 继承

7.1继承的起源 继承(Inheritance),即在面向对象编程中,可以通过扩展(extends)一个已有的类,并继承该类的属性的行为,来创建一个新的类. 已有的类称为父类(也可以称为基类,超类),而新类称为子类(也可以称为派生类). 继承的优点:代码的可重用性:父类的属性和方法可用于子类:子类可以扩展父类的属性和方法:设计应用程序变得更加简单. 7.2 继承的使用原则 观察要使用的类,确定它们之间共同的和特有的属性和行为,将这些共性数据迁移到父类里,便于子类中进行方法和属性的重用. 对于不同

java面向对象编程——第四章 类和对象

OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启动程序流程,随后根据程序流程走向,调用想要的其它过程. 对象是存在的具体实体,具有明确定义的特征和行为. 万物皆为对象,对象因我关注而产生. 面向对象:一种认识事物的方式,注重对事物整体的认知,最符合人类自然的思维习惯. 对象是数据封装的结果. 类是具有相同属性和行为的一组对象的集合. 在软件系统中

Accp8.0 S2 02使用Java实现面向对象编程

对象和封装类和对象使用对象的目地:用计算机语言描述现实世界用计算机语言解决现实世界的问题使用面向对象的好处:交流更加流畅提高设计和开发效率怎样实现面向对象编程找出类找出属性(变量)找出行为(方法)类图:"+"为public 公开的"-"为private私有的this关键字,是对一个对象的默认引用,用以区分同名成员变量this关键字,代表当前对象(当前成员变量)构造方法和重载首先对象实例化构造方法无参构造语法访问修饰符 构造方法名(){}作用给成员属性默认赋初始值有参