第2课第4节_Java面向对象编程_多态性_P【学习笔记】
摘要:韦东山android视频学习笔记
面向对象程序的三大特性之继承性:
1、向上转换:只能定义被子类覆写的方法,不能调用在子类中定义的方法。
 class Father {
     private int money;    
     public int getMoney() {return money; }
     public void setMoney(int money) {this.money = money; }
     public void printInfo() {System.out.println("This is Father");}
 }
 class Son extends Father{
     public void printInfo() {System.out.println("This is son");}
     public void playGame(){System.out.println("This is son");}
 }
 class Daughter extends Father{
     public void printInfo() {System.out.println("This is Father");}
 }
 public class Cnv {
     public static void main (String args[]) {
         Son son = new Son();
         Daughter daughter = new Daughter();
         Father f = son;
         f.printInfo();
         //f.playGame();
         f = daughter;
         f.printInfo();
     }
 }
编译运行:

2、JAVA向下转换的例子,在进行对象的向下转换前,必须首先发生对象的向上转换.否则会编译不过.
 class Father {
     private int money;    
     public int getMoney() {return money; }
     public void setMoney(int money) {this.money = money; }
     public void printInfo() {System.out.println("This is Father");}
 }
 class Son extends Father{
     public void printInfo() {System.out.println("This is son");}
     public void playGame(){System.out.println("This is son");}
 }
 class Daughter extends Father{
     public void printInfo() {System.out.println("This is Father");}
 }
 public class Cnv2 {
     public static void main (String args[]) {
         Father f = new Son();
         Son son = (Son)f;
     }
 }
3、看一下,下面的例子,假如有一千个类继承了father这个类,如果我们要打印他们的信息,那样我们岂不是要写1千个print函数,下面的第二个代码则通过向上转换这个技巧实现.
 class Father {
     private int money;    
     public int getMoney() {return money; }
     public void setMoney(int money) {this.money = money; }
     public void printInfo() {System.out.println("This is Father");}
 }
 class Son extends Father{
     public void printInfo() {System.out.println("This is son");}
     public void playGame(){System.out.println("This is son");}
 }
 class Daughter extends Father{
     public void printInfo() {System.out.println("This is Dauhter");}
 }
 public class Cnv3 {
     public static void main (String args[]) {
         Father f = new Father();
         Son s = new Son();
         Daughter d = new Daughter();
         print(f);
         print(s);
         print(d);
     }
     public static void print(Father f){
         f.printInfo();
     }
     public static void print(Son s){
             s.printInfo();
     }
     public static void print(Daughter d){
             d.printInfo();
     }
 }
通过向上转换实现:
 class Father {
     private int money;    
     public int getMoney() {return money; }
     public void setMoney(int money) {this.money = money; }
     public void printInfo() {System.out.println("This is Father");}
 }
 class Son extends Father{
     public void printInfo() {System.out.println("This is son");}
     public void playGame(){System.out.println("This is son");}
 }
 class Daughter extends Father{
     public void printInfo() {System.out.println("This is Dauhter");}
 }
 public class Cnv4 {
     public static void main (String args[]) {
         Father f = new Father();
         Son s = new Son();
         Daughter d = new Daughter();
         print(f);
         print(s);
         print(d);
     }
     public static void print(Father f){
         f.printInfo();
     }
 }
上述两份代码编译运行结果一样:

4、instanceof: 用来判断一个对象是不是某个类的实例
 class Father {
     private int money;    
     public int getMoney() {return money; }
     public void setMoney(int money) {this.money = money; }
     public void printInfo() {System.out.println("This is Father");}
     public void drink(){System.out.println("drink");}
 }
 class Son extends Father{
     public void printInfo() {System.out.println("This is son");}
     public void playGame(){System.out.println("playGame");}
 }
 class Daughter extends Father{
     public void printInfo() {System.out.println("This is Dauhter");}
     public void dance(){System.out.println("dance");}
 }
 public class Cnv5{
     public static void main (String args[]) {
         Father f = new Father();
         Son s = new Son();
         Daughter d = new Daughter();
         printAction(f);
         printAction(s);
         printAction(d);
     }
     public static void printAction(Father f){
         if (f instanceof Son){
             Son s = (Son)f;
             s.playGame();
         }else if (f instanceof Daughter){
             Daughter d = (Daughter)f;
             d.dance();
         }else if(f instanceof Father){
             f.drink();
         }
     }
 }
编译运行结果:

相关代码存放在github,可以下载https://github.com/zzb2760715357/100ask
  
第2课第4节_Java面向对象编程_多态性_P【学习笔记】的更多相关文章
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
		
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
 - 第2课第7节_Java面向对象编程_内部类_P【学习笔记】
		
摘要:韦东山android视频学习笔记 1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...
 - 第2课第5节_Java面向对象编程_异常_P【学习笔记】
		
摘要:韦东山android视频学习笔记 java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...
 - 第2课第2节_Java面向对象编程_封装性_P【学习笔记】
		
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...
 - 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】
		
摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...
 - 第2课第6节_Java面向对象编程_包和权限_P【学习笔记】
		
摘要:韦东山android视频学习笔记 1.使用package定义编译的时候存放的位置 package a.b.c.d; public class Package { public static v ...
 - 类和对象:面向对象编程 - 零基础入门学习Python037
		
类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...
 - .net 4.0 面向对象编程漫谈基础篇读书笔记
		
话说笔者接触.net 已有些年头,做过的项目也有不少,有几百万的,也有几十万的,有C/S的,也有B/S的.感觉几年下来,用过的框架不少,但是.net的精髓一直没有掌握.就像学武之人懂得各种招式,但内功 ...
 - Python 进阶_OOP 面向对象编程_组合与继承
		
#目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...
 
随机推荐
- zookeeper介绍(4)zookeeper的完整分布式
			
参考: zookeeper的单机和伪分布式教程请参考:zookeeper介绍(1)zookeeper介绍与安装 Zookeeper的完整分布式集群搭建: 准备好三台centos主机:(在这我使用的是z ...
 - docker复制文件到宿主机
			
从主机复制到容器 sudo docker cp host_path containerID:container_path 从容器复制到主机 sudo docker cp containerID:con ...
 - Kali下的内网劫持(四)
			
在前面我都演示的是在Kali下用命令行的形式将在目标主机上操作的用户的信息捕获的过程,那么接下来我将演示在Kali中用图形界面的ettercap对目标主机的用户进行会话劫持: 首先启动图形界面的ett ...
 - 微信小程序~跳页传参
			
[1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...
 - jni接口
			
https://www.jianshu.com/p/d4a502420a89 #pragma once /*DO NOT EDIT THIS FILE - it is machine generate ...
 - .NET 使用 VLC 播放视频
			
使用 VLC 播放监控有几个月了,现在是多个项目中都有用到.在使用的过程中也有一些细节供大家参考. 一.对 VLC 的了解 VLC 是一个开源的跨平台多媒体播放器及框架. VLC 官方出的有播放器.编 ...
 - Linux CentOS7.x安装docker全过程
			
1.在安装docker之前,首先使用yum -y remove docker命令移除系统中已有的旧版本的docker yum -y remove docker 这里显示该系统没有安装过docker: ...
 - test20190901 NOI2019 模拟赛
			
0+0+0=0.还是太菜,看不出题型. Masodik 你要从 (0,0) 点走到 (n,m),每次只能往 x 轴或者 y 轴正方向移动一个单位距离.从 (i,j) 移动到 (i,j+1) 的代价为 ...
 - async-validator 表单验证注意事项
			
1. this.$refs[formName].validate()里面的内容不执行 解决问题出处:https://segmentfault.com/q/1010000009679079 问题描述:1 ...
 - Cocos2d-x学习小结 配置篇
			
Cocos2d-x学习小结 配置篇 学习工具:Cocos2d-x用户手册,<Cocos2d-x游戏开发之旅> 首先官网下载cocos2d-x源码,安装vs2019.如果没有安装python ...