黑马程序员_Java基础[16]_多态1
---------- android培训 、 java培训 、期待与您交流! ----------
【【多态】】
instanceof
定义:某一种事物的多种存在形态
【【instanceof 关键字】】用于判断所属类型。
/*
* 【【多态】】
* 定义:某一种事物的多种存在形态
* 人:男人、女人
* 动物:猫、狗
* 猫 x = new 猫;
* 动物 x = new 猫;
*
* 多态强调对象上的体现,其实函数也体现出了。
* 重点讲:对象的多态性。
*
* 围绕一下4点学习:
* 1、多态的体现形式?
* 父类的引用指向了自己的子类对象,这就是多态的体现。
* 父类的引用也可以接收自己的子类对象。
* 2、多态的前提?
* 必须是类与类之间有关系,要么继续,要么实现。
* 通常还有一个前提:存在覆盖。
* 3、多态的好处?
* 多态的出现,大大的提高了程序的扩展性
* 4、多态的弊端:
* 提高了扩展性,但只能使用父类的引用访问父类的成员。
* 5、多态的应用?【请看Demo_Duotai3】
* 6、多态出现在代码中的特点(多态使用的注意事项)【请看Demo_Duotai4】
*
*/
/*
* 需求:
* 动物
* 猫,狗
*/
package DayXuexi;
abstract class Animal{
abstract void eat();
}
//猫
class Cat extends Animal{
public void eat(){
System.out.println("chi yu");
}
public void cathMouse(){
System.out.println("zhua mouse");
}
}
//狗
class Dog extends Animal{
public void eat(){
System.out.println("chi gu tou");
}
public void kanHome(){
System.out.println("kan Home");
}
}
//猪
class Pig extends Animal{
public void eat()
{
System.out.println("chi si liao");
}
public void gongDi(){
System.out.println(" gong di");
}
}
public class Demo_Duotai {
public static void main(String []args){
/*按照以往的逻辑,我们在这里想要这些东西吃东西,那么就得挨个new一次,并调用吃的方法。非常麻烦
* 而多态的出现,则解决了这个复杂的代码:
*/
//第一步:
/*
Animal a=new Cat();//[a]
a.eat();
Animal b=new Dog();
b.eat();
Animal c=new Pig();
c.eat();
*/
//继续优化:
Function(new Cat());
Function(new Dog());
Function(new Pig());
}
public static void Function(Animal name){ //[b] 其实就是: Animal name=new Cat/Dog/Pig
name.eat();
}
//否则每一个东西都要写这么一个方法进行重载,相比,多态提高了代码的扩展性。
/*
public static void Function(Cat c){
c.eat();
}
public static void Function(Dog d){
d.eat();
}
public static void Function(Pig p){
p.eat();
}
*/
}
-------------------------------------------------------------------------------------------------------
package DayXuexi;
/*
* 【【多态】】
* 定义:某一种事物的多种存在形态 至始至终都是子类在做着变化。
用多态1的例子来使用【特有方法】
*/
abstract class Animal2{
abstract void eat();
}
//猫
class Cat2 extends Animal2{
public void eat(){
System.out.println("chi yu");
}
public void cathMouse(){
System.out.println("zhua mouse");
}
}
//狗
class Dog2 extends Animal2{
public void eat(){
System.out.println("chi gu tou");
}
public void kanHome(){
System.out.println("kan Home");
}
}
//猪
class Pig2 extends Animal2{
public void eat()
{
System.out.println("chi si liao");
}
public void gongDi(){
System.out.println(" gong di");
}
}
public class Demo_Duota2 {
public static void main(String []args){
//关键:
Animal a=new Cat();//类型提升 这里把cat提升为Animal 也称为向上转型
/*比如以前学习到的 byte=2; int x=b; b就会被提升为int */
a.eat();
/*如果想要调用cat的特有方法时,如何操作*/
//【强制】将父类的引用转成子类类型 【 向下转型】
Cat c=(Cat)a;
c.eat();
c.cathMouse();
/*这个时候,子类的两个方法都拥有了。
千万不要将父类对象转为子类类型。
正确的是将父类的应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换
当子类有限的时候可以用【mm】
【多态】至始至终都是子类对象在做着变化。
*/
}
public static void Function(Animal2 name){ //[b] 其实就是: Animal name=new Cat/Dog/Pig
name.eat();
/* 子类有限的时候才这么干。【mm】
if(name instanceof Cat2){
Cat2 c= (Cat2)name;
} else if(name instanceof Dog2){
Dog2 d=(Dog2)name;
} else if(name instanceof Pig2){
Pig2 p=(Pig2)name;
}
*/
}
}
---------- android培训、 java培训 、期待与您交流!----------
黑马官网:http://edu.csdn.net/heima
黑马程序员_Java基础[16]_多态1相关推荐
- 黑马程序员_Java基础Day05_面向对象之封装(Done)
------- android培训.java培训.期待与您交流! ---------- Day05开始接触到了Java核心部分--"面向对象". 面向对象是一种思考思想,是相对于早 ...
- 黑马程序员_Java基础_前期准备02-1
---------------------------------------- JavaEE+云物联.期待与您交流!----------------------------------------- ...
- 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...
- 黑马程序员_java基础笔记(03)...面向对象
1:面向对象的概念,2 : 类和对象的关系,3 : 封装,4 : 构造函数,5 : this关键字,6 : static关键字, 7 : 单例设计模式,8 : 继承,9 : 抽象类,10 : 接口,1 ...
- 黑马程序员_java基础笔记(06)...集合
---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------- JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...
- 黑马程序员_Java基础面向对象
------- <a href="http://www.itheima.com" target="blank">android培训</a> ...
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
GUI(Graphical User Interface)(图形用户接口):用图形的方式,来 显示计算机操作的界面,这样更方便更直观 CLI(Conmand line User Interface)( ...
- 黑马程序员_Java基础_this,super,static,final关键字
一,this关键字 1,当成员变量和局部变量重名时,可以使用this关键字来区分. this关键字代表的是本类对象,this一般是在一个函数中,哪个对象在调用this所在的函数,this就代表哪个对象 ...
- 黑马程序员_Java基础GUI
------- <a href="http://www.itheima.com" target="blank">android培训</a> ...
最新文章
- [程序员创造力训练 1] 猜单词 - 关于健康
- 招聘 | 阿里巴巴搜索推荐事业部-知识图谱校招
- 报名中 | 微软首席人工智能科学家邀你参加一场AI领域的私密聚会
- 微观经济学的学习和理解
- java爬取网页并保存_第九讲:Python爬取网页图片并保存到本地
- Cortex-M0(3)---ARM Cortex-M0 异常与中断
- Vue 使用 v-show 失效
- python初级第三库(人工智能,web解析,人机交互)
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...
- access与sqlserver数据转换
- 前大灯是近光灯还是远光灯_夜间上高速使用近光灯?不会开车就别开,否则12分都不够扣!...
- iOS官方demo下载网站
- 汉字unicode编码范围
- 获取稳定的西刺代理IP
- tm4c123g c语言,Tm4c123GX(tiva)入门详细教程
- theano学习--theano.function
- 张孝祥正在整理Java就业面试题大全
- Mstar 平台(648)唤醒之串口唤醒
- python实现合并多个excel中同名的sheet
- python掷骰子猜大小