javaday11

多态
多态体现的格式:

父类类型变量名= 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(“猫抓老鼠”);
}
}

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;
	}
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210411193847714.png)

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() {
		
	}
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210411193820292.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU1Njg5MzA3,size_16,color_FFFFFF,t_70)2020080605044
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bai3322732541

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值