多态的基本知识<多态的前提是继承哟!!!!>

多态的基本知识<多态的前提是继承哟!!!!>

多态:


1.何为多态


2.多态的前提条件;


3.多态访问成员的特点


4.多态的优点


5多态的缺点


6如何解决多态的缺点了?

一、多态


某个事物,在不同的时刻表现出来的不同状态

比如:
猫是动物


Animer c = new Cat();


猫是猫


Cat c1 = new Cat();<记得从右边往左边开始年>

二、前提条件


A:有继承的关系


B:子类重写父类的方法


C:父类的引用(比如说上面的c )指向子类的对象

举个例子来说明一下:

/*

动物、狗的例子:

*/

class Animer{


public void show(){


System.out.println(“父类的方法”);


}

}

class Dog extends{//狗狗继承动物


public void show(){


System.out.println(“子类重写了父类的方法”);


}

}

class Test{


public static void main(String [] agrs){


//父类的引用指向子类的对象


Animer d = new Dog();


d.show();


}

}

三、多态访问成员的特点:

在上面的例子中如果子类有特有的方法,在编译的时候是否会报错了?

class Animer{


public void show(){


System.out.println(“父类的方法”);


}

}

class Dog extends{//狗狗继承动物


public void show(){


System.out.println(“子类重写了父类的方法”);


}





public void methed(){


System.out.println(“子类特有的功能”);


}

}

class Test{


public static void main(String [] agrs){


//父类的引用指向子类的对象


Animer d = new Dog();


d.show();





d.methed();//这里会提示报错有!!!!


}

}

这个和多态访问成员的特点有关,

那么

多态有哪些特点了?

1.访问成员变量的时候:


编译看左边,执行看左边

2.构造方法


在继承关系中,在调用子类的构造方法时候,系统都回去默认的访问父类的无参构造方法


对父类的数据进行初始化

3.成员方法


编译看左边,执行看右边




所闻的左边就是父类,右边就是子类

比如说访问成员方法:

编译看左边就是说编译的时候看这个方法在父类中是否存在,

执行看右边是说调用的时候要看子类中的这个方法

四、.优点:可维护、可扩展型

可扩展型举例说明:

class Animer{


public void eat(){


System.out.println(“Animer eat”);


}





public void sleep(){


System.out.println(“Animer sleep”);


}

}

class Cat extends Animer{


public void eat(){


System.out.println(“Cat eat”);


}





public void sleep(){


System.out.println(“Cat sleep”);


}

}

class Dog extends Animer{


public void eat(){


System.out.println(“Dog eat”);


}





public void sleep(){


System.out.println(“Dog sleep”);


}

}

//动物的工具类

class UserTool{


private UserTool(){}//这样设计是为了防止new 对象





public static void useTool(Animer a){


a.eat();


a.sleep();


}

}

class Test3{


public static void main(String[] args){


Animer c = new Cat();//多态这样来解释:cat 是 animeir   从右边往左边看


Animer c2 = new Cat();


Animer c3 = new Cat();





//工具类中的方法是静态方法,调用可以通过类名调用


//为了防止对工具类进行创建对象


//所以构造方法的修饰符该为private,这样都不能创建对象了


//不信你可以试一下看报错不?


/*


错误: UserTool()可以在UserTool中访问private


UserTool ut = new UserTool();


*/


//UserTool ut = new UserTool();


UserTool.useTool(c);//传递的参数是引用类型,那么要传入一个对象


UserTool.useTool(c2);


UserTool.useTool(c3);


System.out.println(“————————-“);


//
cat创建完了。这个时候如果要加入dog了


//这个时候只要创建dog类,然后继承animer,在重写父类的方法都可以了


//从而体现了多态的扩展型



Animer d = new Dog();


UserTool.useTool(d);





//后面如果还要添加,比如说Pig  ,只需要创建Pig类,然后在继承Animer


//在main方法中在创建Pig对象,在调用工具类中的方法即可




五、缺点是:不能访问子类特有的功能

六、怎么办了?

能否把父类的引用赋给子类的引用了?

可以

这个叫做向下转型,注意的是需要强制转换了

比如说:

Animer d = new Dog();//向上转型

d.show();

Dog d2 = (Dog)d;//向下转型

d2.methed();














版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100816.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一文解释清卷积神经网络中池化层的作用「建议收藏」

    池化层:池化层夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。池化层分为3类,平均池化,最大池化和随机池化。拿最大池化举个例子:上图的例子是按步幅2进行2X2的最大池化时的处理顺序。最大池化是获得最大值的运算,“2X2”表示目标区域的大小。如上图所示,从2X2的窗口的移动间隔为2个元素。另外,一般来说,池化的窗口大小会和步幅设定成相同的值。比如3X3的窗口的步幅会设为3,4X4的窗口的步幅会设为4等。而最大池化的优点是:

  • python动态心形代码简单_python心形曲线代码

    python动态心形代码简单_python心形曲线代码欢迎关注【拇指笔记】,持续更新一些好玩、有趣的Python小项目。需要程序的朋友,直接私信我即可。原文链接【Python】五分钟画一条动态心形曲线~​mp.weixin.qq.com先上效果使用Python绘制一条动态的心形曲https://www.zhihu.com/video/12280010884537671681.绘制一条心形曲线最近看到个视频,打算绘制个心型动态的曲线。1.1Matla…

    2022年10月16日
  • Windows中Pycharm中配置Qt[通俗易懂]

    Windows中Pycharm中配置Qt[通俗易懂]Qt是什么Qt是Python开发窗体的工具之一,它与python有着良好的兼容性,且可通过可视化拖曳的方式进行窗体的创建,提高开发效率。Qt工具支持Windows,Linux,MacOSX三种操作系统。可用pipinstallpyqt5进行在线安装配置Pycharm由于QtDesigner在设计窗体时,后缀名为ui,需要转为py文件后才可以被…

  • 数组splice_数组concat方法

    数组splice_数组concat方法有三个方法经常会混淆,但是了解它后你会发现很好区分splice方法是数组特有的方法spite方法是字符串特有的方法slice方法是字符串和数组共同都有的方法这里介绍下数组的常用方法数组的splice方法splice()函数用于从当前数组中移除一部分连续的元素。如有必要,还可以在所移除元素的位置上插入一个或多个新的元素。该函数以数组形式返回从当前数组中被移除的元素。该…

  • Vue(renren-fast_vue_master)项目目录结构[通俗易懂]

    Vue(renren-fast_vue_master)项目目录结构[通俗易懂]打算做一个请假管理OA项目Demo,后端采用renren-fast框架,后台管理系统采用renren-fast_vue_master项目,打算利用renren-fast-vue-master改造成一个简单的请假管理系统,包含注册、登陆、请假流程查看等等简单的展示即可,由于之前没做过Vue,现简单地介绍下项目目录结构:├──build/#Webpack配…

    2022年10月28日
  • linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2

    linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2bzip2命令用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linuxbzip2命令的多种范例供大家查看,相信大家看完后会有很多收获。语法bzip2(选项)(参数)选项-c或——stdout:将压缩与解压缩的结果送到标准输出;-d或——decompress:执行解压缩;-f或-force:bzip2在…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号