重写 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是终于的意思,能够修饰类,成员变量,成员方法. • 修饰类,类不能被继承 • 修饰变量,变量就变成了常量,仅仅能被赋值一次. • ...
随机推荐
- STM32L071CBTX操作ECC508
因为我是在stm32上面做的加密操作,所以我只对stm32的方案做总结. 1.ATECC508的底层接口是i2c的,工程中跟i2c相关的操作放在文件hal_stm32l0_ateccx08_i2c.c ...
- Resin安装配置
在linux下安装Resin过程整理 下载Resin, http://caucho.com/products/resin/download#download 检查JDK是否安装,环境是否配置 ...
- 关于 legend_noa
真名:qlw 性别:男 常用ID:legend_noa(有时候也用fseject以表示我的弱, 曾经不懂事用goddess_Q),具体意思是我最喜欢的两个奥特曼:诺亚和雷杰多 p1 诺亚,p2 雷杰多 ...
- mac电脑上如何启动mysql
export PATH=$PATH:/usr/local/mysql/bin/ mysql -uroot -p
- python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...
- solr的基础使用
查询运算符 例如:http://localhost:8984/solr/mycore/select?q=*:* : 指定字段查指定值,如返回所有值q=*:* ? 匹配单个字符, 例如: q=tit ...
- Wow64(32位进程)注入DLL到64位进程
转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...
- "Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs
最近在部署MySQL主从复制架构的时候,碰到了"Last_IO_Error: Fatal error: The slave I/O thread stops because master a ...
- JS获取option的value和text
window.onload = function(){ //首先获得下拉框的节点对象: var select = document.getElementById("s1"); // ...
- Redis 认识与安装
1. redis是一种Nosql数据库,使用key-value存储数据,因为基于内存存储,所以可以用来做缓存(mysql等数据库是基于表基于数据库的) 2. 和memcathed的区别 redis会生 ...