Java之旅_面向对象_多态
参考并摘自:http://www.runoob.com/java/java-polymorphism.html
多态
多态是一个行为具有多个不同表现形式的能力。
多态就是同一个接口,使用不同的实例而执行不同的操作。
多态存在的三个必要条件:
1.继承 2.重写 3.父类引用指向子类对象
如Parent a = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
多态实例:
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("eat fish");
}
public void work(){
System.out.println("catch mouse");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("eat bone");
}
public void work(){
System.out.println("watch home");
}
}
public class Test{
public static void main(String[] args){
show(new Cat()); //以cat对象调用show方法
show(new Dog()); //以dog对象调用show方法
Animal a = new Cat(); //向上转型
a.eat();
Cat c = (Cat)a; //向下转型
c.work();
}
public static void show(Animal a){
a.eat();
//类型判断
if(a instanceof Cat){
Cat c = (Cat)a;
c.work();
}else if(a instanceof Dog){
Dog c = (Dog)a;
c.work();
}
}
}
//运行结果
eat fish
catch mouse
eat bone
watch home
eat fish
catch mouse
虚方法:
class Animal{
public Animal(int a){
System.out.println("superclass...");
}
public void eat(){
System.out.println("superclass test....");
}
public void eat2(){
System.out.println("superclass eat2...");
}
public void doeat(){
//空方法,实际运行子类方法
}
}
class Cat extends Animal{
public Cat(){
super(100);//父类构造器带参数时,子类构造器中必须通过super调用父类构造器并配参数。
System.out.println("subclass..");
}
public void eat2(){
System.out.println("subclass eat2...");
}
public void doeat(){
eat(); //父类有,子类没有,子类直接调用
eat2(); //父类有,子类重写,调用子类方法直接调用
this.eat2();//同上
super.eat2();//父类有,子类重写,调用父类方法用super
}
}
public class Test{
public static void main(String[] args){
Animal a = new Cat(); //父类引用指向子类对象
a.doeat();
}
}
//运行结果:
superclass...
subclass..
superclass test....
subclass eat2...
subclass eat2...
superclass eat2...
编译的时候,编译器使用父类中的方法验证,运行时使用子类方法执行,该过程称为虚拟方法调用,该方法称为虚拟方法。
java中所有方法都能以这种方式表现,因此重写的方法能在运行时调用,不管编译时源代码中引用变量是什么数据类型。
多态的实现方式:
方式一:重写
方式二:接口
方式三:抽象类和抽象方法
Java之旅_面向对象_多态的更多相关文章
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...
- Java之旅_面向对象_封装
参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...
- Java之旅_面向对象_抽象类
参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...
- Java之旅_面向对象_包(Package)
http://www.runoob.com/java/java-package.html 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用 ...
- Java之旅_面向对象_接口
参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...
- Java之旅_面向对象_重写和重载
参考并摘自:http://www.runoob.com/java/java-override-overload.html 重写(Override) 子类对父类(允许访问的)方法的实现过程进行重新编写, ...
- java语言基础(四)_面向对象_类_对象_封装_构造
面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...
- Python笔记_第三篇_面向对象_7.多态
1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...
- Java笔记(十五)……面向对象IV多态(polymorphism)
概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...
随机推荐
- Android开发(十五)——ListView中Items的间距margin
ListView中Items没有margin 参考:http://www.cnblogs.com/xitang/p/3677528.html
- Springboot学习笔记(五)-条件化注入
前言 将Bean交给spring托管很简单,根据功能在类上添加@Component,@Service,@Controller等等都行,如果是第三方类,也可以通过标有@Configuration的配置类 ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- 【netcore基础】.NET Core使用EPPlus实现MVC API里的Excel导出功能 配置中文表头
EPPlus 用来操作excel非常方便,不用依赖微软的office包,所以推荐使用. 下面是具体步骤和代码 首先用nuget安装 EPPlus.Core 我装的版本是 1.5.4 然后就可以用 Ex ...
- Qt编写自定义控件1-汽车仪表盘
前言 汽车仪表盘几乎是qt写仪表盘控件中最常见的,一般来说先要求美工做好设计图,然后设计效果图给到程序员,由程序员根据效果来实现,主要靠贴图,这种方法有个好处就是做出来的效果比较逼真,和真实效果图基本 ...
- Get Started with the Google Fonts API
Get Started with the Google Fonts API This guide explains how to use the Google Fonts API to add fon ...
- genieacs Installation on Ubuntu14.04
Beside the installation guide on the main page, here is a guide to install GenieACS off a freshly in ...
- h5 打造全屏体验 element.requestFullscreen()
google打造全屏体验 https://developers.google.cn/web/fundamentals/native-hardware/fullscreen/ 以前github上的 ht ...
- yii2优化 - 开启 Schema 缓存
开启 Schema 缓存 Schema 缓存是一个特殊的缓存功能,每当你使用活动记录时应该要开启这个缓存功能.如你所知, 活动记录能智能检测数据库对象的集合(例如列名.列类型.约束)而不需要手动地描述 ...
- db2 删除过期的日志和备份文件(转)
DB2 删除过期备份和日志 $ db2 list history archive log all forpayment2 ------列出归档日志 $ db2 list history back ...