Java面向对象的三大特性之一 多态
多态:
子类重写父类方法
1)位置:子类和父类中有同名的方法
2)方法名相同,返回类型和修饰符相同,参数列表相同
方法体不同
多态的优势和应用场合
多态:同一个引用类型,使用不同的实例而执行不同的操作
方法重载也是多态的一种体现.
人的不同肤色不是多态
多态的终极目标:
为了实现统一调用。
多态的两种方式:
多态一:
父类普通类 方法a()
子类普通继承父类 方法a()
多态二:
父类的抽象类 方法是抽象方法a()
子类普通实现 抽象类 重写了抽象方法a()
instanceof 用来判断一个对象是否属于一个类或者实现了一个接口
简单工厂:
通过工厂类 创建子类对象 保存到父类的类型中
■多态可以减少类中代码量
·可以提高代码的可扩展性和可维护性
■向上转型一子类转换为父类,
·自动进行类型转换
■向下转型一父类转换为子类,
·结合instanceof运算符进行强制类型转换
例子:
父类:Pet
package cn.javaoppDay01; public abstract class Pet {
public String name;
public int health=;
public int love=;
public Pet(String name) {
super();
this.name = name;
}
public void print(){
System.out.println("我的名字是"+this.name+"健康值"+this.health+"亲密度"+this.love);
}
public abstract void eat();
}
package cn.javaoppDay01; 狗狗类:Dog
public class Dog extends Pet { public Dog(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void eat() { }
public void catchingFlyDisc(){
System.out.println("狗狗"+super.name+"正在接飞盘");
super.health =super.health-;
super.love =super.love+;
System.out.println("狗狗的健康值为:"+this.health+",亲密值为:"+this.love); } }
package cn.javaoppDay01; public class Penguin extends Pet{
企鹅类:Penguin
public Penguin(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void eat() { }
public void swimming(){
System.out.println("企鹅"+super.name+"正在游泳");
super.health =super.health-;
super.love =super.love+;
System.out.println("企鹅的健康值为:"+this.health+",亲密值为:"+this.love); } }
测试类:
package cn.javaoppDay01; public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub Dog dog=new Dog("啊啊");
dog.catchingFlyDisc();
Penguin penguin=new Penguin("哈哈");
penguin.swimming();
} }
instanceof运算符的使用
作用:用来判断一个对象是否属于一个类或者实现一个接口
类型转换比较
1.
子类转换父类
向上转型
自动转换
2.
父类转换子类
向下转型
使用isntanceof用作比较判定
子类 对象名 = (子类)父类;
使用子类对象
例子:
父类:
/**
*父类 宠物类
*/
public class Pet {
public void eat(){
System.out.println("pet正在吃");
}
}
Cat:猫类
public class Cat extends Pet {
public void eat(){
System.out.println("猫吃猫粮");
} public void ball(){
System.out.println("猫玩球");
}
}
子类:
狗狗类 :
/**
*子类:狗狗类
*/
public class Dog extends Pet{
public void eat(){
System.out.println("狗狗吃狗粮");
} public void catchFlyDisk(){
System.out.println("狗狗玩飞盘");
}
}
子类:
企鹅类:
/** *企鹅类
*/
public class Penguin extends Pet{
public void eat(){
System.out.println("企鹅吃鱼");
} public void swiming(){
System.out.println("企鹅游泳");
}
主人类
/**
*主人类
*/
public class Master { public void feed(Pet pet){
pet.eat();
} //领养宠物 多态形式3:父类作为方法返回值,子类实例化 类型自动转换
public Pet getPet(int typeid){
Pet pet=null;
if(typeid==){
pet=new Dog();
}
else if(typeid==){
pet=new Penguin();
}
else if(typeid==)
{
pet=new Cat();
}
return pet;
}
//主人和宠物玩耍的行为
public void play(Pet pet){
if (pet instanceof Dog) {
Dog dog=(Dog)pet;//向下转型
dog.catchFlyDisk();
}else if(pet instanceof Penguin){
Penguin peng=(Penguin)pet;
peng.swiming();
}else if(pet instanceof Cat){
Cat cat=(Cat)pet;
cat.ball();
} } }
测试类:
public class Test { /**
*
*/
public static void main(String[] args) {
//多态的形式1
Dog dog=new Dog(); Penguin peng=new Penguin(); Cat cat=new Cat();
Master ms=new Master();
ms.feed(dog);
ms.feed(peng);
ms.feed(cat); //多态的形式2:父类做类型,子类实例化
Pet pet=new Dog();//自动转换
pet.eat(); //调用领养宠物 形式3:父类作为方法的返回类型
System.out.println("请选择您要领养的宠物:(1-狗狗 2-企鹅 3-猫) ");
Scanner input=new Scanner(System.in);
int xz=input.nextInt();
Master dx=new Master();
Pet pets=dx.getPet(xz);
pets.eat(); dx.play(dog); } }
Java面向对象的三大特性之一 多态的更多相关文章
- Java学习笔记二十五:Java面向对象的三大特性之多态
Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...
- 3.java面向对象编程三大特性之多态
面向对象编程的三大特性:封装.继承.多态 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对类的外部而言它的内部实现细节是隐藏的,暴露给外界的只是它的实现方法. ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- 谈谈Java面向对象的三大特性
Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...
- Java学习笔记十八:Java面向对象的三大特性之封装
Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态 二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...
- Java学习笔记二十一:Java面向对象的三大特性之继承
Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...
- java面向对象的三大特性
1.面向对象的三大特性 继承.封装.多态 什么是继承? ①继承是面向对象程序设计能够提高软件开发效率的重要原因之一. ②继承是具有传递性的,就像现实中孙子不仅长得像爸爸而且还像他爷爷. ③继承来的属性 ...
- Java 面向对象的三大特性之一 继承
继承: Java是继承的三大特性之一,是Java中实现代码重用的手段之一 将重复的代码抽取到父类中继承的有点或者现实 优点: 方便修改代码 减少代码量 Java中继承的语法: 修饰符 SubClass ...
- java面向对象的三大特性——多态
多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底 ...
随机推荐
- 在不安装oracle客户端的情况下,使用PLSQL
一般在使用plsql时,会结合oracle客户端来使用,这样方便把数据库连接信息添加到plsql中.不过oracle客户端软件有点庞大,安装起来不太方便,所以在网上找到一种不依赖oracle客户端来使 ...
- CURL操作
具体代码如下: <?php$curl=curl_init(); //初始化$url='http://www.ecshop.com';//curl_setopt(curl资源,选项标志,选项值)c ...
- vSphere 扩展硬盘空间
把所有的snapshot都删除了之后,ssh上去之后,进vmfs目录到client machine的目录. 然后执行下面的方法. 虽然成功了,却没看到有扩展的. 唯一的好处是, vSphone Cli ...
- ubuntu 14.04 postgresql 的总结
1)为了允许远程连接: a) http://askubuntu.com/questions/423165/remotely-access-postgresql-database To open the ...
- Spring Boot入门第四天:使用Thymeleaf模板引擎
原文链接 关于Thymeleaf的优点,我只说一条:它就是html页面啊,直接可以用浏览器打开.受够了JSP的同学可以尝试一下. 1.在pom.xml文件中添加依赖: <!--<depen ...
- Processing 与 C 相同和不同的地方
Processing 与 C Processing 语言和其他语言有很多相似之处,这是它作为一种计算机语言的特征,同时,Processing 用于艺术创作,所以也有一些专用的函数. 相同的几点: 作为 ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 树形菜单添加节点
jQuery EasyUI 树形菜单 - 树形菜单添加节点 本教程向您展示如何附加节点到树形菜单(Tree).我们将创建一个包含水果和蔬菜节点的食品树,然后添加一些其他水果到已存在的水果节点. 创建食 ...
- JS过渡和变形效果演示(举例:鼠标滑过图片放大) --JS案例
1.代码: <!DOCTYPE html><html><head> <meta charset="utf-8"> <title ...
- Flex动画效果的用法--Resize
Flex动画效果的用法--Resize FlexAdobeXML <?xml version="1.0" encoding="utf-8"?> & ...
- Sums of Digits CodeForces - 509C (贪心,模拟)
大意: 一个未知严格递增数组$a$, 给定每个数的数位和, 求$a[n]$最小的数组$a$ #include <iostream> #include <algorithm> # ...