1 多态

1.1 什么是多态:

父类引用指向子类对象

package com.zhiyou100.Day10;
public class DemoDuoTai01 {public static void main(String[] args) {Fu f1 = new Fu();//正宗的父类对象Zi z1 = new Zi();//正宗的子类对象//子类继承父类;子类对象拥有父类中定义的所有成员//父类对象可以做的事情  子类对象都能做//1:把子类对象 伪装成父类类型————多态//     父类引用指向子类对象//        给子类对象起个父类类型的名字//多态格式:父类引用=子类对象;Fu fuzi = new Zi();}public static void test(Fu fu) {}
}
class Fu {}
class Zi {}

1.2 多态对象的特点:

除了重写的方法 其他和父类对象完全相同

多态对象:伪装成父类类型的子类对象

  • 特点1:多态对象隐藏子类特有成员变量
  • 特点2:多态对象隐藏子类特有成员方法
  • 特点3:被重新定义的成员变量 显示的父类中定义???
  • 特点4:多态的对象 重写的方法 调用的是子类中定义的
package com.zhiyou100.Day10;import javax.sound.midi.Soundbank;public class DemoDuoTai01 {public static void main(String[] args) {Fu f1 = new Fu();//正宗的父类对象System.out.println(f1.a);f1.hai();Zi z1 = new Zi();//正宗的子类对象System.out.println(z1.a);z1.hai();//子类继承父类;子类对象拥有父类中定义的所有成员//父类对象可以做的事情  子类对象都能做//1:-----把子类对象 伪装成父类类型————多态//       父类引用指向子类对象//        给子类对象起个父类类型的名字//多态格式:父类引用=子类对象;Fu fuzi = new Zi();//多态对象:伪装成父类类型的子类对象System.out.println(fuzi);//类型@地址————com.zhiyou100.Day10.Zi@15db9742System.out.println(fuzi.a);//2:-----多态对象有哪些特点://报错:fuzi.b           特点1:多态对象隐藏子类特有成员变量//报错:fuzi.game()    特点2:多态对象隐藏子类特有成员方法//                   特点3:被重新定义的成员变量 显示的父类中定义:隐藏子类重新定义的成员变量 //                           显示从父类继承由于被重新定义而隐藏的成员变量fuzi.hao();            //特点4:多态的对象 重写的方法,调用的是子类中定义的}                     //总结:多态对象 除了重写的方法 其他和父类对象完全相同public static void test(Fu fu) {}
}class Fu {int  a=11;int  c=22;void hai(){System.out.println("hai----------fu");}void hao(){System.out.println("hao----------fu");}
}class Zi extends Fu{int a=1;int b=2;void hao(){System.out.println("hao----------zi");}void game(){System.out.println("game----------zi");}
}

1.3 多态使用场景1:

定义方法参数列表时 定义为父类类型 这样就可以传递任意子类类型的对象

未使用多态:

1: 代码复用性差:为每一种动物写一个wei方法

2: 代码扩展性差: 如果有新的类型动物:还需要在Demo03DuoTai01为此类型的动物添加一个wei方法

3: 代码耦合度高:Demo03DuoTai01类的开发 必须等待Dog、Pig、Cat类创建完毕 才能写不同的wei方法 否则编译器报错

使用多态来实现:

1 : 代码复用性强:所有的Animal2都可以使用此wei方法:wei(Animal2 animal2)

2 : 代码扩展性强: 如果有新的类型动物:只需要此新动物继承Animal2类型即可

3 : 代码耦合度低:Demo03DuoTai01类的开发和Dog、Pig、Cat类开发 可以完全实现同步开发 互不干涉

狗Dog 猫Cat 猪Pig

package com.zhiyou100.Day10;
public class DemoDog01 {//多态使用场景1:定义方法参数列表时  定义为父类类型  这样就可以传递任意子类类型的对象public static void main(String[] args) {Dog dog=new Dog("d", "hh");wei(dog);Cat cat=new Cat("c","mm");wei(cat);Pig pig=new Pig("p", "zz");wei(pig);     /*Dog dog=new Dog("dd", "藏獒");wei(dog);    //------------------?Cat cat=new Cat("cc", "汤姆");wei(cat);Pig pig=new Pig("pp", "佩奇");wei(pig);*/}//4 定义喂方法时:参数列表定义为父类类型::调用方法时 传递任意子类类型的对象public static void wei(Animal12 animal12) {animal12.eat();animal12.yunDong();}
/*  private static void wei(Dog d) {//-------------?d.eat();d.yunDong();}private static void wei(Cat c) {c.eat();c.yunDong();}private static void wei(Pig p) {p.eat();p.yunDong();}*/   }
//2 让所有的子类继承父类
class Dog extends Animal12{public Dog(String name, String type) {super(name,type);}//3 根据子类需求 重写eat和yunDong方法void eat(){System.out.println(type+":"+name+"  正在啃骨头!");}void yunDong(){System.out.println(type+":"+name+"  吃完 捉老鼠!");}
}
class Cat extends Animal12{public Cat(String name, String type) {super(name,type);}void eat() {System.out.println(type+":"+name+"  正在吃鱼!");}void yunDong() {System.out.println(type+":"+name+"  吃完 晒太阳!");}
}
class Pig extends Animal12{public Pig(String name, String type) {super(name,type);}void eat() {System.out.println(type+":"+name+"  正在吃饲料!");}void yunDong() {System.out.println(type+":"+name+"  吃完拱白菜!");}
}
//1 提取子类共同成员 形成父类-------------------------
class Animal12{String name;String type;public Animal12(String name, String type) {this.name = name;this.type = type;}//Animal12信息不完整  无法实现eat和yunDong   此方法存在的意义::为子类定义规范void eat(){}void yunDong(){}
}

1.4 多态使用场景2:

在定义类的成员变量时 都定义为父类类型 这样就可以赋值任意子类类型的对象

package com.zhiyou100.Day10;public class DemoLamp {//创建灯泡对象RedBulb rdBulb=new RedBulb("红灯一号");GreenBulb  grBulb=new GreenBulb("绿灯一号");//创建台灯对象Lamp lamp = new Lamp();//灯泡和台灯关联lamp.redBulb=rdBulb;lamp.on();lamp.off();lamp.greenBulb=grBulb;lamp.on();lamp.off();
}//红灯泡
class RedBulb {String name;void light() {System.out.println(name + "红");}public RedBulb(String name) {this.name = name;}
}//绿灯泡
class GreenBulb {String name;void light() {System.out.println(name + "绿");}public GreenBulb(String name) {this.name = name;}
}class Lamp {//定义属性记录当前台灯上的灯泡RedBulb redBulb;GreenBulb greenBulb;public void on() {if (redBulb != null) {//引用数据类型的默认初始值是 nullredBulb.light();}if (greenBulb != null) {greenBulb.light();}}public void off() {System.out.println("关灯");}
}

2 final

最终的:修饰符:修饰::类+成员变量+局部变量+普通方法final修饰的类:不能被继承
final修饰的方法:不能被重写final修饰的成员变量 没有默认初始值
final修饰的变量 只能赋值一次
final修饰的变量---常量(final修饰的变量+常量值)
final常量 命名规范:所有字母大写+单词之间用_分割:final S_D_METHOD
public class Demo01Final {public static void main(String[] args) {Demo011FinalClass  d1=new Demo011FinalClass();}
}
// final修饰的类 不能被继承final class Demo011FinalClass{int a=0;void show() {}}//class Zi011 extends Demo01FinalClass{}//The type Zi011 cannot subclass the final class Demo01FinalClass//final修饰的成员变量 没有默认初始值//final修饰的变量 只能赋值一次//final修饰的变量---常量(final修饰的变量+常量值)//final常量 命名规范:所有字母大写+单词之间用_分割:final String  WO_DE_SEHN_FEN_ZHONG_ID="410185198602221111";class Demo012{int c;final int a;//The blank final field a may not have been initializedDemo012(int a){this.a=a;}void show() {final int b=1;//b++;//The final local variable b cannot be assigned. It must be blank and not using a compound assignmentSystem.out.println(b);}}class Demo013{final void show() {}void hai() {}}//final方法 不能被重写class Damo013Zi extends Demo013{//final void show() {}// Cannot override the final method from Demo013void hai() {}}

Day10 多态 final相关推荐

  1. Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类

    文章目录 Eclipse工具中java项目的工程结构 静态代码块的书写格式 静态代码块,构造代码块,构造方法的优先级 static关键字的特点 封装的概念 private关键字的特点 面向对象思想特点 ...

  2. java第四弹 多态 final static 代码块 抽象类 匿名类 接口 Java8新特性:接口增强

    1.多态 多态的理解 (1)同一个动作作用于不同的对象产生的不同的行为,比如不同子类对父类的不同的重写. (2)多态就是一个对象的多种形态. 多态的体现 (1)基于继承的实现,不同子类重写了父类方法之 ...

  3. 1-10 面向对象之多态

    作业回顾 继承: 为了减少相同关联类的相关属性和方法,所抽取出来一个模板类[父类],让当前抽取出来类和原有类产生关联,这种方式就是--->继承 提供继承信息的--> 父类 得到继承信息 - ...

  4. C++11新特性的总结

    C++11新特性 auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11) C++动态内存管理 序列式容器 array forward_list; 继承和 ...

  5. Java后端技术面试汇总(第一套)

    面试汇总,整理一波,doc文档可点击[ 此处下载] 1.基础篇 1.1.Java基础 • 面向对象的特征:继承.封装和多态 • final, finally, finalize 的区别 • Excep ...

  6. 重拳出击之《JVM》面试官版 (初哥勿看)

    <fonr color = black>JVM发展史,虚拟机发展史模块 java技术体系包括了几个组成部分? javaME.SE.EE分别是什么? 都说JDK7版本是第一个里程碑版本,为什 ...

  7. 【成神之路】Java基础相关面试题

    面向对象的特征: 继承.封装和多态 final, finally, finalize 的区别 final final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性 ...

  8. JAVASE学习笔记-1 (包括java一些基本知识)

    目录 打开DOS命令窗口,执行java HelloWorld.执行原理? ClassLoader是在哪个位置上搜索HelloWorld.class字节码文件的? 关于JAVA源程序当中的注释: 什么是 ...

  9. Java面试高频(多次面试踩过的坑)

    一.JAVA基础 基础知识 基本数据类型 int.byte.short.long.boolean.float.double.char 基本类型 位数 字节 默认值 范围 byte 8 1 0 -128 ...

最新文章

  1. asp.net 对xml文件的读写,添加,修改,删除操作
  2. PyTorch之LeNet-5:利用PyTorch实现最经典的LeNet-5卷积神经网络对手写数字图片识别CNN
  3. 关于afxbeginthread时WaitForMultipleObjects不起作用
  4. Git/Git-flow使用心得
  5. Java基础学习总结(68)——有关Java线程方面的面试题
  6. UnityShader中插值平滑曲线
  7. Cisco常见命令大全
  8. Spring Boot 集成maven和Spring boot的profile功能
  9. Xposed+JustTrustMe解决SSL证书问题
  10. 一篇很感人的DOTA小说--我本近卫
  11. python学习之面对对象程序设计作业
  12. PhotoDraweeView for Fresco
  13. 大数据:大二上期期末感悟及总结
  14. “一键GHOST”傻瓜式系统备份与恢复
  15. java字符串转日期_在java中如何将一个字符串转换为日期?
  16. 协方差意味着什么_微服务意味着我们可以使用所需的任何语言? 真?
  17. 【UNIX环境高级编程】
  18. 纽约市立大学布鲁克林学院计算机系,纽约市立大学布鲁克林学院教授张嘉如 带你体验《舌尖上的道德》...
  19. 无人驾驶--实时定位与地图构建(SLAM)仿真与实战(附源码)
  20. win10更新服务打开后为什么服务拒绝访问

热门文章

  1. 非科班出身程序员该如何弥补技术差距?
  2. c语言期末网上考试题目回岔开吗,C语言期末考试题目.doc
  3. html设置一句话的样式,页面上的div标签,其HTML代码为divid=boxstyle=color:red文字/div,为其设置CSS样式如下:...
  4. 当“长期主义”遇上“流量生意”,轻松筹与水滴筹谁更胜一筹?
  5. 小学期Python面向对象实践-2 # Python # Cilay
  6. 老外码农酒后吐槽,该说的不该说的全说了!!
  7. C语言入门递归算法——汉诺塔(简单易懂,最后还有汉诺塔游戏)
  8. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)...
  9. 文本标注工具BRAT的安装与配置
  10. 便宜SSL证书申请平台 证书获取方案