多态
多态体现的格式:
父类类型变量名= 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 Cat extends Doot {
@Override
public void eat() {
System.out.println(“猫够吃鱼”);
}
public void eathom() {
System.out.println(“猫抓老鼠”);
}
}
package Ling.java;
public abstract class Doot {
public abstract void eat();
}
2020080605030