`
想学跑的猪
  • 浏览: 15330 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员_多态

阅读更多

            ------ android培训java培训、java基础学习技术总结、期待与您交流! ----------

      多态:可以理解为一个事物具有多中体现的形态
      人:男人、女人
      动物:猫、狗
      猫 mao=new 猫();
      动物 dw=new 猫();
      多态在对对象上的体现
      函数也具有多态性
      1.多态的体现
      父类的引用指向了自己的子类对象
      父类的引用也可以接收自己的子类对象
  
      main函数是程序的调用者,相当于我们的客户端。
     2. 多态的前提条件
      必须是类与类之间有关系,要么继承,要么实现。
      3.多态的好处
       多态的出现大大的 提高了代码的拓展性
    改写已经写好的类  违背了描述显示生活中事物的规律
    实现了后期拓展性
    4.多态的弊端
    提高了拓展性,但是只能使用父类引用去访问父类中的成员
    类型转型
    1.向上转型
    将子类类型自动提升为父类类型
    2.向下转型
    如果想要调用子类的特有方法时,可以把引用强制转型成子类引用
    在强制转型时,不能将父类对象强转成子类对象,或者将其他对象转成该对象
    多态至始至终都是子类对象在做变化
    如何使用子类中特有的方法
        向下转型
    多态使用的注意事项
    5.多态的应用
    6.多态成员变量的特点
    非静态函数的特点
    编译时期参阅引用变量所属的类中是否有调用方法,如果有,编译通过;
    如果没有,编译失败
    在运行时期,参阅对象所属的类是否有调用方法
    简单总结就是,成员函数在多态调用时,编译看左边,运行看右边。
    静态成员函数的特点
    无论编译和运行都参考左边(静态函数的覆盖在开发过程中不太会出现)
    静态方法不需要调用对象中的变量,被存放在静态方法区
    静态方法不参考左边的对象
    静态绑定为静态绑定
    非静态绑定为动态绑定
   
    在多态中,成员变量的特点,无论是编译还是运行,
    都参考左边(引用变量所属的类)。

    示例1如下:

abstract class Animal {
	public abstract void eat();
}

class Cat extends Animal {
	public void eat() {
		System.out.println("吃鱼");
	}

	public void catchMouse() {
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal {
	public void eat() {
		System.out.println("啃骨头");
	}

	public void kanjia() {
		System.out.println("看家");
	}
}

class Pig extends Animal {
	public void eat() {
		System.out.println("吃饲料");
	}

	public void gongdi() {
		System.out.println("拱地");
	}
}

public class DuoTaiDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Animal an1 = new Cat();
		Animal an2 = new Dog();
		Animal an3 = new Pig();
		function(an1);
		function(an2);
		function(an3);
	}

	public static void function(Animal an) {
		if (an instanceof Cat) {
			an.eat();
			((Cat) an).catchMouse();
		} else if (an instanceof Dog) {
			an.eat();
			((Dog) an).kanjia();
		} else if (an instanceof Pig) {
			an.eat();
			((Pig) an).gongdi();
		}
	}
}

 示例2如下:

abstract class Student{
	public abstract void study();
	public void sleep(){
		System.out.println("躺着睡!");
	}
}
class Yure extends Student{
	public void study(){
		System.out.println("基础学习!");
	}
	public void sleep(){
		System.out.println("坐着睡!");
	}
}
class Jiuye extends Student{
	public void study(){
		System.out.println("提升学习!");
	}
}
public class DuotaiDemo2 {
	public static void main(String[] args) {
		doSome(new Yure());
		doSome(new Jiuye());
	}
	public static void doSome(Student stu){
		stu.study();	
		stu.sleep();	
	}
}

 

            ------ android培训java培训、java基础学习技术总结、期待与您交流! ----------

分享到:
评论

相关推荐

    黑马程序员_(适合初学者入门的Java基础视频)

    "黑马程序员_(适合初学者入门的Java基础视频)"是一套专为初学者设计的Java基础教学课程,旨在帮助零基础的学习者逐步掌握Java编程的基本概念和技能。 该视频教程涵盖了Java的基础知识,包括: 1. **环境搭建**:...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...

    黑马程序员_Java基础辅导班教程课件[第01期]第15天

    《黑马程序员_Java基础辅导班教程课件[第01期]第15天》是针对初学者设计的一堂深入浅出的Java编程课程,旨在帮助学员巩固和深化Java基础知识。这堂课件涵盖的内容广泛且实用,对于想要在IT行业中开启Java开发旅程的...

    黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)

    《黑马程序员_从零开始征服Android之旅(第二季)源码和笔记(上)》是一部针对初学者的全面Android开发教程,旨在帮助学员系统地掌握Android应用开发的基础知识和实战技巧。通过本教程的学习,你可以从理论出发,...

    黑马程序员_毕向东_Java基础源码.rar

    这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...

    黑马程序员_Java基础辅导班教程课件[第01期]第11天

    "黑马程序员_Java基础辅导班教程课件[第01期]第11天"是一个专门为初学者设计的培训课程,旨在帮助学员深入理解和掌握Java的核心概念。这个课程可能是通过视频形式进行的,结合了理论讲解和实际操作,以便让学习者能...

    黑马程序员_Java基础辅导班教程课件[第01期]第14天

    【Java基础辅导班教程】- 黑马程序员 在编程世界中,Java是一种广泛应用的面向对象的编程语言,尤其在企业级应用开发中占据主导地位。"黑马程序员"作为知名的IT培训机构,提供了丰富的Java基础辅导课程,旨在帮助...

    黑马程序员_Java基础辅导班教程课件[第01期]第8天

    在这个阶段,学员们通常会接触到更深入的编程实践,包括类与对象的进阶、封装、继承、多态等面向对象编程的核心概念。 1. **面向对象编程(OOP)**:Java是一门面向对象的语言,第8天的课程可能会重点讲解OOP的四大...

    黑马程序员_Java基础辅导班教程课件[第01期]第10天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...

    黑马程序员_毕向东最新经典Java基础视频

    根据提供的文件信息,我们可以推断出这是一套由知名IT教育机构“黑马程序员”出品、由讲师毕向东主讲的Java基础教学视频。由于实际视频内容无法直接获取,本篇将依据标题、描述以及部分标签内容,综合分析并展开相关...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    黑马程序员_历经5年锤炼(适合初学者入门的Java基础视频)(解压版)

    通过这套《黑马程序员_历经5年锤炼(适合初学者入门的Java基础视频)》,初学者能够系统地学习Java的基础知识,为后续深入学习和实战打下坚实的基础。Java作为一种强大的编程语言,在软件开发领域有着不可替代的地位,...

    黑马程序员_Java基础辅导班教程课件[第01期]第7天

    4. **多态**:多态是面向对象的另一个关键特性,它允许不同对象对同一消息作出不同的响应。通过接口或抽象类,可以实现多种类型的对象对同一方法的调用。 5. **异常处理**:Java提供了异常处理机制,通过try-catch-...

    C++黑马程序员学习资料

    C++黑马程序员学习资料,附赠《InterviewGuide第四版By阿秀》、《LeetCode刷题手册》、《背包问题九讲》、《算法图解》pdf版本,三个基础课程文档手册及三个实验项目,由简到繁分别为《通讯录管理系统》、《职工管理...

    黑马程序员匠心之作 C++教程_第4阶段实战-基于多态的企业职工系统讲义.rar

    《C++教程_第4阶段实战-基于多态的企业职工系统讲义》是黑马程序员精心制作的一份教学资源,特别适合C++初学者。这份讲义深入浅出地讲解了C++编程语言中的多态性,并通过实战项目——企业职工系统,让学习者能够将...

    B站黑马程序员Python教程学习笔记.zip

    在B站黑马程序员的Python教程中,你将深入理解Python的基础概念,包括: 1. **变量与数据类型**:Python支持多种数据类型,如整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。此外,还有列表(list...

    黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义.rar

    《黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义》是为C++初学者量身定制的一份详细教学资源。这份讲义深入浅出地介绍了C++编程语言,并通过实际的机房预约系统项目,帮助学习者将理论知识与实践相...

    黑马程序员匠心之作 C++教程_第5阶段-C++提高编程资料讲义.rar

    《黑马程序员匠心之作 C++教程_第5阶段-C++提高编程资料讲义》是一份针对C++编程初学者精心制作的教程资料,旨在帮助学习者深入理解和提升C++编程技能。这份讲义涵盖了许多关键的C++知识点,下面将对其进行详细解读...

    黑马程序员C++从0到1笔记教程-pdf带目录

    有七个阶段:第1阶段C++ 匠心之作 从0到1入门,第2阶段实战-通讯录管理,第3阶段-C++核心编程 资料,第4阶段实战-基于多态的企业职工系统,第5阶段-C++提高编程资料,第6阶段实战-基于STL泛化编程的演讲比赛资料,第...

Global site tag (gtag.js) - Google Analytics