ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

day11.java

2021-04-11 18:00:57  阅读:163  来源: 互联网

标签:java 子类 void System day11 println public out


多态

多态体现的格式:

父类类型变量名= 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

标签:java,子类,void,System,day11,println,public,out
来源: https://blog.csdn.net/qq_55689246/article/details/115602072

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有