day11.java
2021/4/11 20:28:14
本文主要是介绍day11.java,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
多态
多态体现的格式:
父类类型变量名= new子类对象;变量名.方法名();
父类类型: 指子类对象继承的父类类型,或者实现的父接口类型。代码如下:
Fuf=newZi(); f .method();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。
1.多态
多态的转型分为向上转型与向下转型两种
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的
(当父类引用指向一个子类对象时,便是向上转型。)
父类类型 变量名 = new 子类类型(); 如: Doutai yu= new Doutai();
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。
子类类型 变量名 = (子类类型) 父类变量名; 如: Cat cat =(Cat)doy;
(一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。)
1.2 转型
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥 有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子 类特有的方法,必须做向下转型。
public class Doutai { public void method(){ System.out.println("fu lei fan fa"); } public void methodp(){ System.out.println("fu lei de te you fan fa"); } }
public class Doutai1 extends Doutai { public void method(){ System.out.println("zi lei fan fa"); } public void methodb(){ System.out.println("zi lei de te you fan fa"); } }
public class Yu { public static void main(String[] args) { Doutai yu= new Doutai(); yu.method(); yu.methodp(); Doutai1 xu =new Doutai1(); xu.method(); xu.methodb(); xu.methodp(); Doutai Doutai =new Doutai1();// Doutai.method();//子类把父类中的重写就是子类方法 Doutai.methodp(); //Doutai.methodb(); } }
课堂案例
/* 成员方法 * new 的是谁,就先用谁 * 对比 * 成员变量 编译看左边 运行还看左边 * 成员方法 编译看左边 运行 看右边 * */ public class Fu { public static void main(String[] args) { Yt obj = new Yu(); obj.method(); obj.methodp(); } }
public class Yo { public static void main(String[] args) { /*直接访问 看等号左边是谁 就用谁 没有则向上找*/ Yt obj = new Yu();//他认为是父类的 System.out.println(obj.num);//1.父类的 //System.out.println(obj.age); /*成员方法访问 看该*/ obj.showNew(); } }
public class Yu extends Yt { int num=20; int age =16; public void showNew() { System.out.println("子类的方法"+num); } public void method(){ System.out.println("zi lei fan fa"); } public void methodq(){ System.out.println("zi lei de te you fan fa"); } }
public class Yu extends Yt { int num=20; int age =16; public void showNew() { System.out.println("子类的方法"+num); } public void method(){ System.out.println("zi lei fan fa"); } public void methodq(){ System.out.println("zi lei de te you fan fa"); } }
public class Cat extends Doot { @Override public void eat() { System.out.println("猫够吃鱼"); } public void eathom() { System.out.println("猫抓老鼠"); } } ```java package Ling.java; public abstract class Doot { public abstract void eat(); }
package Ling.java; public class Doy extends Doot{ public void eat() { System.out.println("够吃骨头"); } public void goyhom() { System.out.println("狗看门"); } }
package Ling.java; / 向上类型转换 总是安全的,但是也有缺陷 原来的子类的特有功能就不能使用了 public class Main { public static void main(String[] args) { // 类似于 隐式类型转换 Doot yu =new Cat(); yu.eat(); // aniaml.catchMouse(); // 向下类型转换 由父类型 转换成子类型 还原 Cat cat =(Cat) yu; cat.eathom(); //Doy doy =(Doy) yu; // java.lang.classCastException // Dog dog = (Dog)animal; } }
package Ling.java; public class M03 { public static void main(String[] args) { Doot doy = new Doy(); doy.eat(); if( doy instanceof Doy) { Doy dog =(Doy)doy; dog.goyhom(); } if(doy instanceof Cat ) { Cat cat =(Cat)doy; cat.eathom(); } } public static void giveMeAPet() { } }
2020080605013
这篇关于day11.java的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南