黑马程序员_java面向对象 多态
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、多态
多态:可以理解为事物存在的多种体现形态
一般重点为对象的多态性,像函数也有多态性,如重载。
1、多态的基本体现
父类的引用指向了自己的子类对象。即Animal c = new Cat()
父类的也可以接受自己的子类对象。即public static void function(Animal a)
具体程序解释:
abstract class Animal......................创建父类,抽象函数
{
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 DuoTaiDemo
{
public static void main(String[] args)
{
/*
Cat c = new Cat();..........原先建立对象和其使用方法,即Cat c = new Cat() 通过这种方法建立一个对象,
c.eat(); 并用 类名.成员 进行调用。但是如果每建立一个对象就得重复使用,代码复用性
Dog d = new Dog(); 太低。建立调用函数的话,只是和对象有关,像function(Cat c),只在Cat对
d.eat(); 象建立时可用,一旦对象改变又得建立新的函数。既然Cat 和Dog有一样的动作,
*/ 所以可以进行如下程序的更改。
Animal c = new Cat();.....................通过父类建立对象,指向子类对象,一般有继承和实现关系的类与类
c .cat(); 就可以应用
function(new Cat());.........................函数调用方法,此处new Cat(),其实就是Animal c = new Cat();
}
public static void function(Animal a)
{
a.eat();
}
}
2、多态的好处
多态的出现,提高了程序的拓展性
3、多态的前提
必须是类与类之间有关系,要么继承,要么实现。
一般来说,存在覆盖。就是说一般多态是对事物共性的描述。
此处注意:对事物共性的描述,其实就是集成,即是对事物共性部分进行抽取,单独成一类,该私有的私有,该抽象的抽象
4、多态的弊端
提高了拓展性,但是只能使用父类的引用访问父类中的成员。
而且要注意类型的转换:
Animal c = new Cat();其实这里进行类型的转换,把猫提升为动物,类似byte b = 3;int x = b;类型提升了,就是向上转型。具体程序:
class DuoTaiDemo2
{
public static void main(String[] args)
{
Animal c = new Cat();//类型提升,向上转型
c.eat();
如果想要调用猫的方法时,如何操作
类型强制转换,转换成子类类型,乡下转型
Cat c = (Cat)c;
Animal a = new Animal();//如果父类可以建立对象
Cat c = (Cat)c;// 此处是错误的,动物不能强转为猫,从属关系不一样
就是说,不能将父类转换为子类类类型
我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,可以被强转
多态自始至终都是子类对象在做着变化
}
public static void function(Animal a)
{
a.eat();
if (a instanceof Cat)//关键字instanceof
{
Cat c = (Cat)a;
c.catchMouse();
}
}
}
5、多态的应用
实例程序
abstract class Student......................对对象进行抽取,父类,抽象类
{
public abstract void study();................两个功能
public void sleep()
{
System.out.println("躺着睡");
}
}
class BaseStudent extends Student
{
public void study()
{
System.out.println("base study");
}
public void sleep()
{
System.out.println("坐着睡");
}
}
class AdvStudent extends Student
{
public void study()
{
System.out.println("adv study");
}
public void sleep()
{
System.out.println("站着睡");
}
}
class teacher.......................................定义老师类,进行功能调用,基于多态
{
public static void doSome(Student a)....注意此处,多态,父类接受子类对象,其实也是父类指向子类对象
{
a.study();
a.sleep();
}
}
class DuoTaiDemo3
{
public static void main(String[] args)
{
teacher.doSome(new AdvStudent());...函数静态化,直接类名调用即可
}
}
6、多态中成员特点
成员函数特点(指非静态函数):
编译时期:引用型变量所属的类中是否有调用的方法,如果有,编译通过。
运行时期:对象所属类中是否有调用方法
简单就是,成员函数在调用时,编译看左边,运行看右边。
成员变量特点:
无论编译和运行,都参考左边。
静态成员特点:
无论编译和运行,都参考左边
二、object类
object是所有类的根类,其中定义的是所有对象都具备的功能
如果自定义类中也有比较相同的功能,没有必要重新定义
只要沿袭父类中的功能,建立自己特有比较内容即可,就是覆盖。
equals比较的是对象的内存地址值
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
相关推荐
新技术培训 培训讲义8_面向对象之多态.doc 学习资料 复习资料 教学资源
11_Java面向对象_第3天(接口、多态)_讲义
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
黑马程序员 - Java基础教学 - 08 - 面向对象(4)-多态.doc
Java 面向对象三大特性之封装性的学习
Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析
它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装和继承。 Java 多态包括以下三种方式 方法重写(Override) 子类可以对从父类继承的方法进行重写,以便根据子类的...
java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...
面向对象的基本特征三:多态的理解(java) * 多态:多种形态 * * 变量的引用形式: * (1)本态引用:左边的变量与右边的对象是同一种类型 * (2)多态引用:左边的变量是父类类型,右边的对象是子类的对象 ...
java多态、继承练习题,包含题目与答案,............................................................................................................
多态的列子其中涉及到封装是java适应于java初学者学习和模仿,
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象...Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
Lesson_面向对象继承,多态,接口_实训
C#面向对象编程-多态习题[整理].pdf
黑马程序员匠心之作 C++教程讲义,适合初学者,视频教程全程无废话
面向对象的概念 掌握类的继承、方法重写、super关键字的使用、final关键字 熟悉面向对象继承和多态的概念
团队学生技术交流讲座(XXXX)_ 第2课_理解C++虚拟多态机制.pptx
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
团队学生技术交流讲座(XXXX)_第2课_理解C++虚拟多态机制.pptx
JavaSE进阶 面向对象多态