摘要:韦东山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【学习笔记】的更多相关文章

  1. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...

  2. 第2课第7节_Java面向对象编程_内部类_P【学习笔记】

    摘要:韦东山android视频学习笔记  1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...

  3. 第2课第5节_Java面向对象编程_异常_P【学习笔记】

    摘要:韦东山android视频学习笔记  java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...

  4. 第2课第2节_Java面向对象编程_封装性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之封装性:把属性和方法封装在一个整体,同时添加权限访问. 1.封装性的简单程序如下,看一下第19行,如果我们不对age变量进行权限的管控 ...

  5. 第2课第1节_Java面向对象编程_类的引入_P【学习笔记】

    摘要:韦东山android视频学习笔记 1. 面向对象编程的引入,我们先写一个简单的程序输出张三,李四的名字.代码如下,假如,现在我们要在名字前面添加籍贯广东,那样岂不是每个printf语句都得修改添 ...

  6. 第2课第6节_Java面向对象编程_包和权限_P【学习笔记】

    摘要:韦东山android视频学习笔记  1.使用package定义编译的时候存放的位置 package a.b.c.d; public class Package { public static v ...

  7. 类和对象:面向对象编程 - 零基础入门学习Python037

    类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...

  8. .net 4.0 面向对象编程漫谈基础篇读书笔记

    话说笔者接触.net 已有些年头,做过的项目也有不少,有几百万的,也有几十万的,有C/S的,也有B/S的.感觉几年下来,用过的框架不少,但是.net的精髓一直没有掌握.就像学武之人懂得各种招式,但内功 ...

  9. Python 进阶_OOP 面向对象编程_组合与继承

    #目录 前言 组合 派生 通过继承来覆盖重载方法 最常用的重载场景实例方法的重载 从标准类中派生类方法的重载 前言 我们定义一个类是希望能够把类当成模块来使用,并把类嵌入到我们的应用代码中,与其他的数 ...

随机推荐

  1. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南

    让我们跟着Jerry的文章,一起回到本世纪初那个单纯美好的年代. 2000年9月,Jerry告别了自己的高中时代,进入到自己心目中的电子游戏大学,开始了四年的本科生活.每个新生,都拿到了这样一本薄薄的 ...

  2. Flink实战学习资料

    这份资料我已经看了一些,感觉挺不错的,在这里分享一下,有需要的可以购买学习.

  3. day 01 预科

    目录 作业 二,Markdown基本语法 一级标题 二级标题 三级标题 作业 二,Markdown基本语法 标题 一级标题 二级标题 三级标题 四级标题 加粗 哦,更粗了 斜体 咦,我歪了 高亮 == ...

  4. Linux下的基本命令(不定期更新,欢迎指正错误、交流学习)

    ls 列出目录内容 -a //显示所有文件,包括隐藏文件 -i //显示详细信息 -d //显示目录属性 -h //人性化显示文件大小 -l //长格式显示,也可简写为 ll pwd 显示当前工作路径 ...

  5. idea中新增package总是嵌套的解决方法

    在idea中创建package,为了方便会将com.xx.xx作为一个package,下面添加对应的子package.比如service,config等.但是当我创建是总是会嵌套在下面变成了com.x ...

  6. Docker(5):Docker镜像基本操作(上)

    1.获取镜像 可以使用docker pull 命令从网络上下载镜像.该命令的格式为docker pull NAME[:TAG].对于Docker镜像来说,如果不显示地指定TAG,则默认会选择lates ...

  7. Linux命令——chgrp、chown、chmod

    简介 这三个命令都用于更改文件permission(权限).即下图红框位置 除此之外还有个“连结”,那个指的是硬链接,不是软连接.FS使用inode区分不同文件,而目录树使用文件名区分不同文件,因此可 ...

  8. thinkphp5.x命令执行漏洞复现及环境搭建

    楼主Linux环境是Centos7,LAMP怎么搭不用我废话吧,别看错了 一.thinkphp5.X系列 1.安装composer yum -y install composer 安装php拓展 yu ...

  9. Java自动化环境搭建笔记(1)

    Java自动化环境搭建笔记(1) 自动化测试 先搭建java接口测试的环境: 使用mvn命令构建项目 测试集通过testNG.xml组织并运行 测试数据解耦,通过Excel等文件提供 基础依赖 创建m ...

  10. VUE--404页面

    <一 404 动态页面> <!-- 2017/5/26- yyy-404页面--> <template> <section class="page_ ...