重写 final关键字 多态调用子类特有的属性及行为(向上向下转型)
1.override 重写:在继承中,子类与父类方法名相同,参数列表相同,的方法叫重写,与返回值有关; 主要应用于系统升级.
2.final 关键字:
可修饰:1.类-->被修饰后该类不能被继承
2.方法 -->被修饰后该方法不能被重写
3.变量-->被修饰后该变量为常量,只能赋值一次, 常量标识符全部用大写
3.多态:事物的多种形态
满足条件:
1.继承
2.重写
3.父类引用指向子类对象;
多态弊端:不能调用子类特有的属性和行为.
向上转型:用父类名
向下转型:类名 对象名 = (类名) 多态引用对象名
引入关键字 A instanceof B 判断两边的数据类型是否一致 一致返回true 不一致返回false
例:新建Animal 为父类 cat和Dog为子类 通过向下转型使用子类特有的属性及行为 test为主函数代码
public class Animal {
public String name = "动物";
public void eat(){
System.out.println("动物吃饭");
}
public void sleep(){
System.out.println("动物睡觉");
}
}
父类代码
public class cat extends Animal {
public String name = "猫猫";
public void eat(){
System.out.println("猫在吃饭");
}
public void sleep(){
System.out.println("猫在睡觉");
}
public void catchMouse(){
System.out.println("猫在抓老鼠");
}
}
子类cat代码
public class Dog extends Animal {
public String name = "狗";
public void eat(){
System.out.println("狗在吃饭");
}
public void sleep(){
System.out.println("狗在睡觉");
}
public void lookHome(){
System.out.println("狗在看家");
}
}
子类Dog代码
public class test {
public static void main(String[] a){
Animal cat = new cat();//多态 方法编译时看左边类 运行时看右边对象类
cat.eat();
System.out.println(cat.name);//多态 属性编译时看左边 运行时看左边
//即产生弊端,不能够访问子类特有的属性和行为 需向下转型
test te = new test();
te.Demo(cat);
}
public void Demo(Animal c){ //参数类型采用父类 可以采用父类的属性及行为 及向上转型
System.out.println(c.name);
if(c instanceof cat){ //通过类型匹配进行判断 如果Demo传入的实参为cat,则执行cat向下转型否则执行Dog向下转型
cat ca = (cat)c; //向下转型语句
System.out.println(ca.name);//向下转型后可以使用cat特有的属性
ca.catchMouse();//向下转型后可以使用cat特有的方法(行为).
}else if(c instanceof Dog){//同上
Dog dog = (Dog)c;
dog.lookHome();
}
}
}
运行结果为:
猫在吃饭
动物
动物
猫猫
猫在抓老鼠
主函数进行向上向下转型代码及注释,多多练习!
重写 final关键字 多态调用子类特有的属性及行为(向上向下转型)的更多相关文章
- 多态&&父类调用子类特有的方法
/* 多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数使用的是父类对象,可以传入父类.子类对象 4.局限性: 1>父类类型的变量,不能直接调 ...
- java 多态 向上 向下转型
向上转型 将子类对象当作父类对象 子类对象------>父类对象 先实例化子类 父类 父类对象 = 子类实例 package test2; class Father{ public vo ...
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
- java学习(六)面向对象 final关键字 多态
1.被fnial修饰的方法不能被重写,常见的为修饰类,方法,变量 /* final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆 ...
- 子类的实例给父类的引用 在编译器时候 jvm认为他是父类的实例 只会去寻找父类里面的方法 如果调用子类里面的属性或者方法时候 jvm会认为该引用并没有 所以会报错
- 抽象类、final关键字、多态
1.1 抽象类 1.1.1 抽象类概念 C extends B,B extends A,在继承过程中,形成一个继承金字塔,位于金字塔底部的类越来越具体(强大),位于塔顶的越来越抽象(简单). 例如:人 ...
- 多态使用时,父类多态时需要使用子类特有对象。需要判断 就使用instanceof
instanceof:通常在向下转型前用于健壮性的判断,判断是符合哪一个子类对象 package Polymorphic; public class TestPolymorphic { public ...
- LY.JAVA面向对象编程.final、多态、抽象类、接口
2018-07-08 13:47:26 final关键字 多态 从右向前念 多态的成员访问特点及转型的理解 多态的问题理解: class 孔子爹 { public int age = 40; p ...
- Java基础学习之final和多态及类型转换
finalkeyword: finalkeyword是终于的意思,能够修饰类,成员变量,成员方法. • 修饰类,类不能被继承 • 修饰变量,变量就变成了常量,仅仅能被赋值一次. • ...
随机推荐
- 软件可维护性的影响因素&如何提升
影响因素: 1.可理解性 2.可测试性 3.可修改性 4.可移植性 5.可重用性 如何提升: 1.建立明确的软件质量目标2.使用先进的软件开发技术和工具3.建立明确的质量保证4.选择可维护的语言5.改 ...
- vue添加class类名
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- Actifio OnVault 8.0
- WMI tester
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 《Attention Augmented Convolutional Networks》注意力的神经网络
paper: <Attention Augmented Convolutional Networks> https://arxiv.org/pdf/1904.09925.pdf 这篇文章是 ...
- linux下目录简介——/SElinux
一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELinux 主要由美国 ...
- Ansible 之动态Inventory文件(二)
上篇主要讲解了Ansible 的安装和配置,并且根据不同的业务场景将服务器的信息存放在Ansible的Inventory中,其实存放这样的数据每次更新都需要我们自动的添加和删除,这样对于我们维护起来很 ...
- c# 执行javascript 脚本
/// <summary> /// 执行JS /// this.ExecuteScript("get('{0}')".FormatWith(token0), File. ...
- JS将/Date(1446704778000)/转换成str
JS将/Date(1446704778000)/转换成str:var dateStr = eval(ele.add_time.replace(/\/Date\((\d+)\)\//gi, " ...
- Kong(V1.0.2) Securing the Admin API
Introduction Kong的Admin API为Services, Routes, Plugins, Consumers, and Credentials的管理和配置提供了一个RESTful接 ...