• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

JAVA中多态性的理解(上)————多态性中的方法

互联网 diligentman 1周前 (04-07) 4次浏览

JAVA中多态性的理解(上)————多态性中的方法


大家好,作为一个刚开始接触写博客的计算机小白,写的内容是我在学习和理解过程中的一些想法,如果有不准确或者错误的地方麻烦大家指教【拱手】【拱手】

文章目录

  • JAVA中多态性的理解(上)————多态性中的方法
  • 前言
  • 一、多态性的初理解
  • 二、多态性的使用条件
  • 三、代码示例
  • 四、运行结果
  • 总结

前言

关于JAVA中的多态性而言,对于我个人的理解而言其作用可能更多的节省代码的数量,让同一个方法可以被多次调用,避免多个子类在调用该方法的时候都需要再次将方法代码敲一遍


一、多态性的初理解

①理解多态性:可以理解为一个事务的多种形态

②何为多态性:父类的引用指向子类的多态性(这里父类的引用也就是说new一个父类的对象,被赋值于子类的对象)

③多态性的使用:虚拟方法的调用
在有了对象的多态性之后,我们在编译代码的时候,只能调用父类中已经声明的方法,但我们在实际运行代码的时候,运行的结果是子类重写后的方法

总结:编译看左边,运行看右边


二、多态性的使用条件

①有类的继承关系(extends)
②有方法的重写


三、代码示例

父类:Person
子类:Man Woman
主类:DuoTai

代码目的:通过调用主类方法中的show方法来验证多态性
代码如下(示例):

package com.HeZiHan.java;

public class DuoTai {//主类
	public static void main(String[] args) {
		//打印父类的eat方法    and	每一个子类重写后的eat方法
		Person p1 = new Person();
		p1.eat();
		
		Man m1 = new Man();
		m1.eat();
		
		Woman w1 = new Woman();
		w1.eat();
		
		System.out.println("************************************************");
		//打印进行多态化后的person的对象的eat方法
		Person p2 = new Man();
		p2.eat();
		
		Person p3 = new Woman();
		p3.eat();
		
		System.out.println("************************************************");
		//在主类中调用主类里的方法,但该方法也实现了多态化的使用
		//在该方法中,实参和形参在一起,相当于Person person = new Man();Person person = new Woman();
		DuoTai n =new DuoTai();
		n.show(new Man());
		n.show(new Woman());
		
	}
	//主类中的一个方法
	public void show(Person person){
		person.eat();
		person.sleep();
	}
	
//	System.out.println("************************************************");
	//如果没有多态性的话,那么想要调用这个show方法就需要对这个方法进行多次重写,如下:
//	public void show(Man man){
//		man.eat();
//		man.sleep();
//	}
//	public void show(Woman woman){
//		woman.eat();
//		woman.sleep();
//    }
}
//父类Person
class Person {
	int age;
	double weight;
	
	public void eat(){
		System.out.println("人需要吃饭");
	}
	
	public void sleep(){
		System.out.println("人每天平均需要睡8小时");
	}
}
//子类Man
class Man extends Person{
	int houses;
	//对父类中的方法进行重写
	public void eat(){
		System.out.println("男人每天多吃肉");
	}
	public void sleep(){
		System.out.println("男人平均每天睡7小时");
	}
	
}
//子类Woman
class Woman extends Person{
	int car;
	//对父类中的方法重写
	public void eat(){
		System.out.println("女人每天多吃蔬菜");
	}
	public void sleep(){
		System.out.println("女人平均每天睡9小时");
	}
	
}

四、运行结果

代码如下(示例):

人需要吃饭
男人每天多吃肉
女人每天多吃蔬菜
************************************************
男人每天多吃肉
女人每天多吃蔬菜
************************************************
男人每天多吃肉
男人平均每天睡7小时
女人每天多吃蔬菜
女人平均每天睡9小时

总结

①关于对象的多态性而言,最直接的体现就是“子类的对象赋值给父类的引用”;代码:Person person = new Man();其中在有了对象的多态性后,我们在编译的时候,只能调用父类中声明过的方法,子类中特有的方法我们不能够调用,并且在运行期间,我们实际执行的是子类重写后的方法内容,所以就是说“编译看左,运行看右”。


②对于有了多态性以后,父类的引用中(Person p = new Man()中的p)它的内存中实际是加载了子类特有的属性和方法,但是由于变量p声明为父类Person类型,所以在编译的时候只能够调用父类中声明的属性和方法,导致子类中的属性和方法不能够调用。


③在多态性中,因为父类的引用被赋值为子类,所有在编译和运行的时候虽然有用子类特有的属性和方法,但是却不能够调用,如果想要调用就需要特殊的方法(与基本数据类型的强制类型转换相关)或关键字instanceof的使用,我会写在我的下一篇博客《JAVA中多态性的理解(下)————多态性中的属性》中。


④感谢大家看到这里,这些就是我这个计算机小白的一些想法,如果有哪里出现了错误或者其他问题,欢迎大家指正,感谢感谢。

程序员灯塔
转载请注明原文链接:JAVA中多态性的理解(上)————多态性中的方法
喜欢 (0)