您的位置:首页 > 职场人生

黑马程序员——Java基础-------面向对象(三)

2015-10-12 10:31 405 查看
-------android培训java培训、期待与您交流! ----------

面向对象之多态

多态:某一类事物的多种存在形式

对象的多态性。

class 动物{}

class 猫 extends 动物{}

class 狗 extends 动物{}

猫 x = new 猫();

动物 x = new 猫();//一个对象,两种形态。

猫这类事物即具备者猫的形态,又具备着动物的形态。这就是对象的多态性。

简单说:就是一个对象对应着不同类型. 

多态在代码中的体现:

父类或者接口的引用指向其子类的对象。

多态的好处:

提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的弊端:

前期定义的内容不能使用(调用)后期子类的特有内容。

多态的前提:

1,必须有关系,继承,实现。

2,要有覆盖。 

注:对于转型,自始自终都是子类对象在做着变化

instanceof关键字:

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

abstract class Animal{//定义一个抽象的Animal类
abstract void eat();
}
class dog extends Animal{//定义一个dog类继承Animal类
void eat(){
System.out.println("啃骨头");
}
void lookhome(){
System.out.println("看家");
}
}
class Cat extends Animal{//定义一个Cat类继承Animal类
void eat(){
System.out.println("吃鱼");
}
void CatMouse(){
System.out.println("抓老鼠");
}
}
class DuoTaiDemo{
public staic void main(String[]args){//主函数
Anima a=new Cat();//自动提升类型,猫对象提升了动物类型,但是特有功能无法访问,作用:限制了对特有功能的访问
a.eat();

//如果想用具体动物猫的特有功能,可以将该对像向下转型
Cat c=(Cat)a;
c.eat();
c.CatMouse();
}
public static void method(Animal a){
a.eat();
if(a instanceof Cat){
Cat c = (Cat)a;
c.catchMouse();
}else{
System.out.println("类型不对");
}
}
}

多态时,成员的特点:

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();
Fu.method();//fu static method
Zi.method();//zi static method

Fu f1 = new Zi();//
//		f1.method();//fu static method
//		f1.show();//zi show
//		System.out.println(f1.num);//3

//		Zi z = new Zi();
//		System.out.println(z.num);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: