Java第十天学习笔记~面向对象(接口应用、多态)

接口的应用

暴露的规则   使用规则   实现规则

这些设备和电脑的耦合性降低了

interface USB //暴露的 规则
{
	public void open();
	public void close();
}
class BookPC
{
	public static void main(String[] args)
	{
		useUSB(new UPan());
		useUSB(new UsbMouse());//功能拓展了
	}
	//使用规则
	public static void useUSB(USB u)//接口类型的引用,用于接收(指向)接口的子类对象 
	{
		u.open();
		u.close();
	}
}
//一年以后----------
//实现规则


//这些设备和电脑的耦合性降低了
class UPan implements USB
{
	public void open()
	{
		System.out.println("upan open");
	}
	public void close()
	{
		System.out.println("upan close");
	}
}
class UsbMouse implements USB
{
	public void open()
	{
		System.out.println("Mouse open");
	}
	public void close()
	{
		System.out.println("Mouseclose");
	}
}

多态

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

例:动物中猫,狗。

猫这个对象对应的类型是猫类型:猫 x = new 猫();

同时猫也是动物中的一种,也可以把猫称为动物:动物 y = new 猫();

动物是猫和狗具体事物中抽取出来的父类型。

父类型引用指向了子类对象。

多态性简单说就是一个对象对应着不同类型。

一个多态对应着不同类型   

多态在代码中的体现

多态
    好处: 提高了代码的扩展性,前期定义的代码可以使用后期的内容
    弊端:前期定义的内容不能使用(调用)后期子类的特有内容
    前提:
        1,   必须有关系,继承,实现
        2,有覆盖

/*多态
	好处 提高了代码的扩展性,前期定义的代码可以使用后期的内容
	弊端:前期定义的内容不能使用(调用)后期子类的特有内容
	前提:
		1,必须有关系,继承,实现
		2,有覆盖
*/
abstract class Animal
{
	abstract void eat();
}
class Dog extend Animal
{
	void eat()
	{
		System.out.println("啃骨头");
	}
	void lookHome()
	{
		System.out.println("看家");
	}
}
class Cat extend Animal
{
	void eat()
	{
		System.out.println("吃鱼");
	}
}
class DuoTaiDemo
{
	public static void main(String[] args)
	{
	//	Cat c=new Cat();
	//	Dog d=new Dog();
	//	method(new dog());
	Animal a=new Cat();/* 自动类型提升,猫对象提升了动物类型,但是特有功能无法访问
						作用就是限制对特有功能的访问
						专业讲:向上转型
	
	*/
	a.eat;
	//如果还想用具体动物猫的特有功能
	//你可以将该对象进行向下转型
	Cat.c=(Cat)a;//向下转型的目的是为了使用子类中的特有方法
	c.eat();
	c.catchMouse();
	//注意:对于转型,自始至终都是子类对象在做着类型的变化
	}
	public static void method(Animal a)
	{
		a.eat;
	}
}

注意:

instanceof :用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性的判断。

多态时,成员的特点

1,成员变量

    编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败

    运行时,参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量

    简单说:编译和运行都参考等号左边

2,成员函数(非静态)

    编译时:参考引用型变量所属的类中是否有调用的函数。有,编译通过,没有,编译失败

    运行时:参考的是对象所属的类中是否有调用的函数

    简单的说:编译看左边,运行看右边

3,静态函数

    编译时:参考引用型变量所属的类中的是否有调用的静态方法

    运行时:参考引用型变量所属的类中的是否有调用的静态方法

    简单说,编译和运行都看左边

    其实对于静态方法,是不需要对象的,直接用类名调用

/*多态时,成员的特点
1,成员变量
	编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败
	运行时,参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量
	简单说:编译和运行都参考等号左边
2,成员函数(非静态)
	编译时:参考引用型变量所属的类中是否有调用的函数。有,编译通过,没有,编译失败
	运行时:参考的是对象所属的类中是否有调用的函数
	简单的说:编译看左边,运行看右边
3,静态函数
	编译时:参考引用型变量所属的类中的是否有调用的静态方法
	运行时:参考引用型变量所属的类中的是否有调用的静态方法
	简单说,编译和运行都看左边
	其实对于静态方法,是不需要对象的,直接用类名调用
*/
class Fu
{
//	int num=3;
	void show()
	{
		System.out.println("fu show");
	}
	static void method()
	{
		System.out.println("fu static method");
	}
}
class Zi extends Fu
{
//	int num=4;
	void show()
	{
		System.out.println("zi show");
	}
	static void method()
	{
		System.out.println("zi static method");
	}
}
class DuoTaiDemo3
{
	public static void main(String[] args)
	{
		Fu f=new Zi();
		f.method();
		//f.show();
		//System.out.println(f.num);
	}
}

猜你喜欢

转载自blog.csdn.net/crazyhulu/article/details/84670504