java 多态

本文详细介绍了Java中的多态概念,包括继承、重写和向上转型的条件。通过示例展示了如何利用多态调用子类方法,并解释了动态绑定的过程。此外,还讨论了对象转换和`instanceof`关键字的使用,强调了类型转换在通用程序设计中的重要性。文章提供了具体的代码示例以帮助理解多态的实践应用。
摘要由CSDN通过智能技术生成

java多态

多态的概念

多态字面意思是多种形式, 它意味着父类型的变量可以引用子类型的对象;
举个通俗的例子:
人是一个父类,男生和女生是它的子类, 男生和女生有着不同的喜好,喜欢做的是并不一样,这就是多态;
多态的情况下:定义的引用变量所指向的具体类型和引用变量发出的方法调用在编程时并不确定,只有在程序运行时才确定。
优点:不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上。

多态的条件
  • 继承:必须有父类子类的继承关系
  • 重写:子类要对父类的一些方法进行重写 (再调用方法时,调用的是子类重写的方法
  • 向上转型:多态中需要将子类对象的引用赋给父类对象,使得子类引用能够调用父类和子类的方法
定义格式:父类类型 变量名=new 子类类型();
动态绑定
Father fa = new Son();
System.out.println(fa.show());//这里会调用子类的show方法 因为子类重写了show方法 多态调用的是子类方法
class People{
    public void print(){
        System.out.println("Hello people!");
        print1();
    }
     public void print1(){
        System.out.println("Hello people!");
    }
}

class Man extends People{
    public void print(String name){  //重载会调用父类原方法
        System.out.println("Hello man!");
        print1();
    }
    public void print1(){   //重写会调用子类重写的方法
        System.out.println("Hello man!");
    }
}

public class main{
	public static void main(String[] args)
	{
		People a =new Man();
		a.print();
	}
}

输出结果:
在这里插入图片描述

对象转换和instanceof关键字

一个对象的引用可以类型转换为另一个对象的引用,这称为对象转换

print(new Student());
//将一个Student对象赋值给一个People类型变量
//其等价于
People now = new Student();
print(now);
//这是隐式转换 
//因为Student的实例也是People的实例
//而反过来 Student st = now 就会发生编译错误 因为People的实例不一定是Student的实例
//这时就要显示转换
Student st = (Student) now;//显示转换语法类似于此

为什么要进行类型转换:
因为父类对象不能直接调用子类方法 当申明一个父类变量后要将此变量进行子类的方法操作 就要类型转换了

类型转换的应用性:
进行通用程序设计时 一个好的做法就是把变量定义为父类型 这样它就可以接收任何类型的对象

instanceof是java中的关键字 用于确保在类型转换之前一个对象是另一个对象的实例

例子:

 

class Fruit{
		String name;
		int color;
		int shape;
		public Fruit(){
			color = 0;
			shape = 0;
			name = "apple";
		}
		public int getShape(){
		    return shape;
		}
	}
	class Circle{
		int Diameter;
		public Circle(){
			Diameter = 0;
		}
		public int getDiameter(){
		    return Diameter;
		}
	}

public class Demo {
	public static void main(String[] args) {
		Object object1 = new Fruit();
		Object object2 = new Circle();
		displayObject(object1);
		displayObject(object2);
	}
	
	public static void displayObject(Object object) {
		if (object instanceof Fruit) { 
			System.out.println("The Fruit shape is " + 
			    ((Fruit)object).getShape());
		}
		else if(object instanceof Circle) {
			System.out.println("The circle diameter is " + 
		        ((Circle)object).getDiameter());
		}
	}

}

运行结果:
在这里插入图片描述

参考博客:https://blog.csdn.net/m0_56107268/article/details/121033044
https://blog.csdn.net/qq_41679818/article/details/90523285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值