Java与多态

多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现的类之间强制类型转换方式与父和子之间的强完全一样。

代码:源于张龙老师的视频

关于多态学习的代码:

 Animal.java

package cn.sisy.polymorphism;

public class Animal {
	public void sing(){
		System.out.println("Animal is singing");
	}
	public String name = "小动物";
}

 Cat.java

package cn.sisy.polymorphism;

public class Cat extends Animal{
	public void sing(){
		System.out.println("Cat is singing");
	}

}

 PolyTest02:主要说明向上类型转换和向下类型转换,向上转型不需显示指定,向下转型必须强制转换。

package cn.sisy.polymorphism;

public class PolyTest02 {
	public static void main(String[] args) {
		//向上类型转换---子类转换为父类
		Cat cat = new Cat();
		Animal animal = cat;
		cat.sing();
		//向下类型转换---父类转换为子类
		//必须使用强制类型转换
		Animal a = new Cat();
		Cat c1 = (Cat) a;
		c1.sing();
		//以下的转换可以吗?
		// cn.sisy.base.Animal cannot be cast to cn.sisy.base.Cat
		Animal b = new Animal();
		Cat c2 = (Cat)b;
	}
}

程序运行结果 :

Cat is singing
Cat is singing
Exception in thread "main" java.lang.ClassCastException: cn.sisy.polymorphism.Animal cannot be cast to cn.sisy.polymorphism.Cat
    at cn.sisy.polymorphism.PolyTest02.main(PolyTest02.java:17)

------------------------------------------------------------------------------

下面我们为Cat方法增加一些自己的方法和属性

Cat.java

package cn.sisy.polymorphism;

public class Cat extends Animal{
	public void sing(){
		System.out.println("Cat is singing");
	}
	public void voice(){
		System.out.println("喵喵~~");
	}
	public String name = "小花猫";
}

 PolyTest03.java

package cn.sisy.polymorphism;

public class PolyTest03 {
	public static void main(String[] args) {
		Animal animal = new Cat();
		//以下的语句编译不能通过,因为Animal类中并没有定义voice方法
		//animal.voice();
		System.out.println(animal.name);
		
		//为了调用子类特有的方法,有时候需要进行强制类型转换
		Cat cat = (Cat)animal;
		cat.voice();
		System.out.println(cat.name);
	}
}

 程序的运行结果:

小动物
喵喵~~
小花猫

以上的结果没有体现出属性的多态;为了调用子类特有的方法,需要进行强制类型转换

-------------------------------------------------------------------------

PolyTest4.java 这个例子为了说明多态是一种运行时的行为

package cn.sisy.polymorphism;

/*
 * 此类为了说明Java的多态是一种运行时的行为
 * 因为运行之前a根本不知道将会指向哪种引用,
 * 这种情况也称为dynamically bound
 */
public class PolyTest4{
	public static void main(String[] args){
		A a = null;

		if(args[0].equals("1")){
			a = new B();	
		}
		else if(args[0].equals("2")){
			a = new C();
		}
		else if(args[0].equals("3")){
			a = new D();
		}

		a.method();
	}
}

class A{
	public void method(){
		System.out.println("A");
	}
}

class B extends A{
	public void method(){
		System.out.println("B");
	}
}

class C extends A{
	public void method(){
		System.out.println("C");
	}
}

class D extends A{
	public void method(){
		System.out.println("D");
	}
}

 用 java PolyTest4 2执行程序时将会输出:

 C

----------------------------------------------------------------------------------

以下的程序说明了多态在实际开发中应该如何应用:

class Car{
	public void run(){
		System.out.println("car is running");
	}
}

class BMW extends Car{
	public void run(){
		System.out.println("BMW is running");
	}
}

class QQ extends Car{
	public void run(){
		System.out.println("QQ is running");
	}
}
 
public class PolyTest5{
	
	public void run(BMW bmw)
	{
		bmw.run();
	}

	public void run(QQ qq)
	{
		qq.run();
	}
	
	public static void main(String[] args){
		
		PolyTest5 test = new PolyTest5();

		BMW bmw = new BMW();

		test.run(bmw);

		QQ qq = new QQ();

		test.run(qq);
		

	}
}

 通过以上的程序我们会发现,如何我们把实际存在的车型都写出来,那么PolyTest5.java这个程序将会十分拥挤,那我们是不是可以用已经学到的多态的知识加以改进呢?请看下面的程序。

public class PolyTest5{

	public void run(Car car){
		car.run();
	}

	public static void main(String[] args){
		
		PolyTest5 test = new PolyTest5();

		Car car = new BMW();

		test.run(car);
		
		QQ qq = new QQ();

		test.run(qq);//此处应用了自动向上转型,所以子类对象都是父类对象

	}
}

 上面的程序是不是改进很多呢。。。只需一个方法。。。。

数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值