javaSE-面向对象-多态

定义:某一类事物的多种存在形态。

l例:动物中猫,狗。
l猫这个对象对应的类型是猫类型
猫 x = new 猫();
l同时猫也是动物中的一种,也可以把猫称为动物。
动物 y = new 猫();
动物是猫和狗具体事物中抽取出来的父类型。
父类型引用指向了子类对象。
l程序中体现:

父类或者接口的引用指向或者接收自己的子类对象。

l好处和作用:

多态的存在提高了程序的扩展性和后期可维护性

l前提:
需要存在继承或者实现关系
要有覆盖操作
l

多态的特点


l成员函数:
编译时:要查看引用变量所属的类中是否有所调用的成员。
在运行时:要查看对象所属的类中是否有所调用的成员。
l成员变量:
只看引用变量所属的类。


/*
多态:多种形态。

对象的多态性。

class 动物{}
class 猫 extends 动物{}

猫 x = new 猫();

动物 y = new 猫();//猫这个实体具备着两种形态,一个是猫另一个是动物。这就是多态性。

多态在程序中的体现:父类或者接口的引用指向了自己的子类对象。 


多态的前提:
	1,必须有继承或者实现的关系。
	2,通常都有覆盖的操作。


多态的好处:
	提高了程序的扩展性,在思想上也有不同,以前是面对一个对象调用,对象多了调用麻烦。 
	相当于指挥一批对象做事情,将复杂事情简单化。

多态的弊端:
	多态的出现,虽然可以让前期的程序使用后期的内容。 
	不可以使用子类的特有内容。





*/
//动物:吃。
abstract class Animal
{
	abstract void eat();
}

class Cat extends Animal
{
	void eat()
	{
		System.out.println("吃鱼");
	}
	void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal
{
	void eat()
	{
		System.out.println("啃骨头");
	}
	void lookHome()
	{
		System.out.println("看家");
	}
}



class AnimalDemo 
{
	public static void main(String[] args) 
	{
//		Cat c = new Cat();
//		c.eat();
//		c.catchMouse();
//		Animal a = new Cat();//多态体现。
//		a.eat();
//		a.catchMouse();//不可以的。

		//--------多态的好处---------

		Cat c = new Cat();
//		c.eat();

		Dog d1 = new Dog();
		Dog d2 = new Dog();
		Dog d3 = new Dog();
//		d.eat();
		method(c);
		method(d1);
	}

	public static void method(Animal a)//Animal a = new Cat(); 或者 Animal a = new Dog();
	{
		a.eat();
	}
	/*
	public static void method(Dog d)
	{
		d.eat();
	}
	public static void method(Cat d)
	{
		d.eat();
	}
	*/
}

/*
多态:



*/
abstract class Animal
{
	abstract void eat();
}

class Cat extends Animal
{
	void eat()
	{
		System.out.println("吃鱼");
	}
	void catchMouse()
	{
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal
{
	void eat()
	{
		System.out.println("啃骨头");
	}
	void lookHome()
	{
		System.out.println("看家");
	}
}
class  AnimalDemo2
{
	public static void main(String[] args) 
	{
//		Cat c = new Cat();
		Animal a = new Cat();//向上转型(类型提升)。子类对象提升为了父类型。
		/*
		提升的好处:就是提高了扩展性。隐藏了子类型。
		提升的局限性:只能使用父类中的方法。 如果子类有覆盖的话,运行的是子类的内容。
		*/
		a.eat();


		//如何使用抓老鼠行为。
		Cat c = (Cat)a;//向下转型(强制类型转换)。好处:可以使用具体子类型的特有方法。
		c.catchMouse();


//		向下转型需要注意:父类型向下转成子类型,因为子类型不唯一,所以,需要进行判断。
		Animal an = new Cat();

//		如何判断对象类型呢? 用到一个关键字完成,instanceof   对象  instanceof  类or接口
//		记住:一旦向下转型,必须先instanceof判断
		if(an instanceof Dog){
			Dog d = (Dog)an;//ClassCastException
			d.lookHome();
		}else if(an instanceof Cat)
		{
			Cat c = (Cat)an;
			c.catchMouse();
		}




//		记住:对于子父类转型动作,自始自终都是子类对象在做着类型的转换而已。

		/*
		毕姥爷 x = new 毕老师();
		x.钓鱼();
		x.讲课();
//		x.看电影();
		毕老师 y = (毕老师)x;
		y.看电影();
		*/
	}
}


class 毕姥爷
{
	void 讲课()
	{
		System.out.println("管理");
	}
	void 钓鱼()
	{
	
	}
}

class 毕老师 extends 毕姥爷
{
	void 讲课()
	{
		System.out.println("JAVA");
	}
	void 看电影()
	{
		
	}
}


/*
1,成员变量。
	多态调用时,对于成员变量,无论是编译还是运行,结果只参考引用型变量所属的类中的成员变量。
	参考等号左边。

2,成员函数。
	多态调用时,对于成员函数,
	编译时,参考引用型变量所属的类中是否有被调用的方法。有,编译通过,没有编译失败。
	运行时,参考的是对象所属的类中是否有调用的方法。
	简单说:
	编译看左边,运行看右边。


3,静态函数。
	简单说:
	编译和运行都看左边。 
		
*/
class Fu
{
//	int num = 2;
	void show()
	{
		System.out.println("fu show run");
	}


	static void method()
	{
		System.out.println("fu static method run");
	}
}
class Zi extends Fu
{
//	int num = 8;
	void show()
	{
		System.out.println("Zi show run");
	}
	static void method()
	{
		System.out.println("zi static method run");
	}
}


class DuoTaiDemo 
{
	public static void main(String[] args) 
	{

		/*
		演示静态方法。

		*/

		Fu f = new Zi();
		f.method();
		Zi z = (Zi)f;
		z.method();

		Fu.method();
		Zi.method();
		/*
		//演示成员方法。
		
		Fu f = new Zi();
		f.show();
		*/
		/*
		//演示成员变量。
		Fu f = new Zi();
		System.out.println(f.num);//2
		Zi z = (Zi)f;
		System.out.println(z.num);//8
		*/
	}
}


面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程的一些基本概念和关键术语。 在面向对象编程,我们将程序的数据和对数据的操作(方法)封装在一起,形成一个对象。对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装是面向对象编程的一个重要概念,它指的是将类的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程的另一个重要概念,它指的是通过定义一个新的类来继承现有类的属性和方法。通过继承,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态面向对象编程的又一个重要概念,它指的是同一类型的对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子类重新定义和实现父类的方法方法的重载指的是在同一个类可以定义多个同名但参数列表不同方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为心的编程方式。在JavaSE,我们可以通过封装、继承和多态来实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值